From 4e870dbc4ba32db72881b6c15450605ff9b56d80 Mon Sep 17 00:00:00 2001 From: XianjueDeng Date: Wed, 5 Mar 2025 11:50:23 -0800 Subject: [PATCH 1/7] Create zeroLengthInterface2DUpdate.rst --- .../elements/zeroLengthInterface2DUpdate.rst | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst diff --git a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst new file mode 100644 index 00000000..85d31db6 --- /dev/null +++ b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst @@ -0,0 +1,154 @@ +zeroLengthInterface2DUpdate +=========================== + +**zeroLengthInterface2DUpdate** fixes bugs in **zeroLengthInterface2D** and adds a new feature that allows the user to change the friction coefficient during the analysis. + +(**zeroLengthInterface2D** was written by Roozbeh Geraili Mikola (roozbehg@berkeley.edu) and Prof. Nicholas Sitar (nsitar@ce.berkeley.edu) on July 02 2010.) + +Bugs fixed in zeroLengthInterface2D +------------------------------------- +1. Incorrect friction behavior when the interface is under cyclic sliding motion. +2. Incorrect normal pressure behavior due to the repetitive search algorithm. The original zeroLengthInterface2D overestimates normal pressure at the interface. + +User Instruction +---------------- + +1. **Element Command Syntax** + + The tcl input command for the zeroLengthInterface2DUpdate element is the same as for zeroLengthInterface2D:: + + element zeroLengthInterface2DUpdate eleTag? -sNdNum sNdNum? -pNdNum pNdNum? –dof sdof? mdof? -Nodes Nodes? Kn? Kt? phi? + +2. **Tcl Input Example** + + .. image:: https://github.com/user-attachments/assets/7833184d-cea4-40ee-9198-c795f353c3d1 + :alt: Tcl input example + + **element zeroLengthInterface2DUpdate 1 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi** + + *(The above defines a zeroLengthInterface2DUpdate element between a quad element (in blue) and beam elements (in red).)* + +3. **Changing the Friction Coefficient** + + To update the friction coefficient during analysis, modify the parameter named "phi". For example: + + .. code-block:: tcl + + set Kn 1e6 + set Kt 1e6 + set phi_ini 0.0 + element zeroLengthInterface2DUpdate 1 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi_ini + + *(This creates a zeroLengthInterface2DUpdate element with zero friction, and both normal and tangential stiffness equal to 1e6.)* + + Then, update the friction coefficient as follows: + + .. code-block:: tcl + + parameter 1 element 1 phi + updateParameter 1 [expr 16.7] + + *(The above changes the friction coefficient in element 1 from 0 to 0.3.)* + + Full tcl example code +---------------- +.. code-block:: tcl + wipe + # Create ModelBuilder with 3 dimensions and 6 DOF/node + model basic -ndm 2 -ndf 2 + + # nDMaterial ElasticIsotropic $matTag $E $v <$rho> + nDMaterial ElasticIsotropic 1 1e10 0.49 6.75 + uniaxialMaterial Elastic 2 [expr 1e10]; + # ################################ + # build the model + # ################################# + + node 1 6 0 + node 2 6 1 + node 3 4 1 + node 4 4 0 + fix 3 1 0 0 + element quad 1 1 2 3 4 1 PlaneStrain 1 + + set Kn 1e6; + set Kt 1e6; + set phi 16.7; + + # Gravity loads + pattern Plain 1 Linear { + # sp $nodeTag $dofTag $dofValue + sp 2 2 -1.e-2 + sp 3 2 -1.e-2 + } + + model BasicBuilder -ndm 2 -ndf 3; + + node 5 0 0 + node 6 2 0 + node 7 4 0 + node 8 6 0 + node 9 8 0 + node 10 10 0 + + geomTransf Linear 1 + # wall section + section Fiber 1 { + # patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ + patch rect 2 100 1 [expr -15.0] -0.5 [expr 15.0] 0.5 + } + + element dispBeamColumn 2 5 6 5 1 1 + element dispBeamColumn 3 6 7 5 1 1 + element dispBeamColumn 4 7 8 5 1 1 + element dispBeamColumn 5 8 9 5 1 1 + element dispBeamColumn 6 9 10 5 1 1 + + #element ZeroLengthContactNTS2D eleTag? -sNdNum sNode? -mNdNum mNode? -Nodes Nodes? Kn? Kt? fs? + element zeroLengthInterface2D 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] + # element ZeroLengthNew 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] + fix 5 1 1 0 + fix 10 0 1 0 + + # ---------------------------- + # Start of recorder generation + # ---------------------------- + recorder Node -file reactionForce.out -node 5 10 -time -dof 1 2 reaction; + recorder Node -file Node2.out -node 2 -dof 1 2 -time disp + recorder Node -file Node3.out -node 3 -dof 1 2 -time disp + recorder Element -file Contactele.out -ele 7 -time force + + system SparseGeneral + numberer RCM + constraints Penalty 1.e+018 1.e+018 + test NormDispIncr 1.00e-0010 500 2 + algorithm KrylovNewton + integrator LoadControl 0.1 + analysis Static + + analyze 5 + puts stdout "\ngravity finished" + flush stdout + + wipeAnalysis + + model BasicBuilder -ndm 2 -ndf 2; + loadConst -time 0.0 + remove sp 3 1 + remove sp 3 2 + + pattern Plain 2 "Series -dt 1 -filePath loading.dat -factor 1.0" { + sp 3 1 [expr 0.1] + } + constraints Transformation + test NormDispIncr 1e-7 500 2 + algorithm KrylovNewton + numberer RCM + system ProfileSPD + integrator LoadControl 0.01 + # integrator DisplacementControl 3 1 0.01 + analysis Static + + analyze 300 + puts "\ncyclic slide finished\n" +.. code-block:: tcl From 24d435e2ca0a92f2cf655db57bfc239ff6858617 Mon Sep 17 00:00:00 2001 From: XianjueDeng Date: Wed, 5 Mar 2025 11:51:58 -0800 Subject: [PATCH 2/7] Update zeroLengthInterface2DUpdate.rst --- .../user/manual/model/elements/zeroLengthInterface2DUpdate.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst index 85d31db6..a00f281b 100644 --- a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst +++ b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst @@ -151,4 +151,3 @@ User Instruction analyze 300 puts "\ncyclic slide finished\n" -.. code-block:: tcl From b315384a214012b97d9c50283dc7645f29759ef0 Mon Sep 17 00:00:00 2001 From: XianjueDeng Date: Wed, 5 Mar 2025 12:01:24 -0800 Subject: [PATCH 3/7] Update zeroLengthInterface2DUpdate.rst --- .../elements/zeroLengthInterface2DUpdate.rst | 197 +++++++++--------- 1 file changed, 98 insertions(+), 99 deletions(-) diff --git a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst index a00f281b..a11cdaa2 100644 --- a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst +++ b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst @@ -50,104 +50,103 @@ User Instruction *(The above changes the friction coefficient in element 1 from 0 to 0.3.)* - Full tcl example code +Full TCL Example Code ---------------- + .. code-block:: tcl - wipe - # Create ModelBuilder with 3 dimensions and 6 DOF/node - model basic -ndm 2 -ndf 2 - - # nDMaterial ElasticIsotropic $matTag $E $v <$rho> - nDMaterial ElasticIsotropic 1 1e10 0.49 6.75 - uniaxialMaterial Elastic 2 [expr 1e10]; - # ################################ - # build the model - # ################################# - - node 1 6 0 - node 2 6 1 - node 3 4 1 - node 4 4 0 - fix 3 1 0 0 - element quad 1 1 2 3 4 1 PlaneStrain 1 - - set Kn 1e6; - set Kt 1e6; - set phi 16.7; - - # Gravity loads - pattern Plain 1 Linear { - # sp $nodeTag $dofTag $dofValue - sp 2 2 -1.e-2 - sp 3 2 -1.e-2 - } - - model BasicBuilder -ndm 2 -ndf 3; - - node 5 0 0 - node 6 2 0 - node 7 4 0 - node 8 6 0 - node 9 8 0 - node 10 10 0 - - geomTransf Linear 1 - # wall section - section Fiber 1 { - # patch rect $matTag $numSubdivY $numSubdivZ $yI $zI $yJ $zJ - patch rect 2 100 1 [expr -15.0] -0.5 [expr 15.0] 0.5 - } - - element dispBeamColumn 2 5 6 5 1 1 - element dispBeamColumn 3 6 7 5 1 1 - element dispBeamColumn 4 7 8 5 1 1 - element dispBeamColumn 5 8 9 5 1 1 - element dispBeamColumn 6 9 10 5 1 1 - - #element ZeroLengthContactNTS2D eleTag? -sNdNum sNode? -mNdNum mNode? -Nodes Nodes? Kn? Kt? fs? - element zeroLengthInterface2D 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] - # element ZeroLengthNew 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] - fix 5 1 1 0 - fix 10 0 1 0 - - # ---------------------------- - # Start of recorder generation - # ---------------------------- - recorder Node -file reactionForce.out -node 5 10 -time -dof 1 2 reaction; - recorder Node -file Node2.out -node 2 -dof 1 2 -time disp - recorder Node -file Node3.out -node 3 -dof 1 2 -time disp - recorder Element -file Contactele.out -ele 7 -time force - - system SparseGeneral - numberer RCM - constraints Penalty 1.e+018 1.e+018 - test NormDispIncr 1.00e-0010 500 2 - algorithm KrylovNewton - integrator LoadControl 0.1 - analysis Static - - analyze 5 - puts stdout "\ngravity finished" - flush stdout - - wipeAnalysis - - model BasicBuilder -ndm 2 -ndf 2; - loadConst -time 0.0 - remove sp 3 1 - remove sp 3 2 - - pattern Plain 2 "Series -dt 1 -filePath loading.dat -factor 1.0" { - sp 3 1 [expr 0.1] - } - constraints Transformation - test NormDispIncr 1e-7 500 2 - algorithm KrylovNewton - numberer RCM - system ProfileSPD - integrator LoadControl 0.01 - # integrator DisplacementControl 3 1 0.01 - analysis Static - - analyze 300 - puts "\ncyclic slide finished\n" + + # ---------------------------- + # Start of model generation + # ---------------------------- + wipe + model basic -ndm 2 -ndf 2 + + nDMaterial ElasticIsotropic 1 1e10 0.49 6.75 + uniaxialMaterial Elastic 2 [expr 1e10]; + + # ################################ + # Build the model + # ################################# + node 1 6 0 + node 2 6 1 + node 3 4 1 + node 4 4 0 + fix 3 1 0 0 + element quad 1 1 2 3 4 1 PlaneStrain 1 + + set Kn 1e6; + set Kt 1e6; + set phi 16.7; + + pattern Plain 1 Linear { + sp 2 2 -1.e-2 + sp 3 2 -1.e-2 + } + + model BasicBuilder -ndm 2 -ndf 3; + + node 5 0 0 + node 6 2 0 + node 7 4 0 + node 8 6 0 + node 9 8 0 + node 10 10 0 + + geomTransf Linear 1 + section Fiber 1 { + patch rect 2 100 1 [expr -15.0] -0.5 [expr 15.0] 0.5 + } + + element dispBeamColumn 2 5 6 5 1 1 + element dispBeamColumn 3 6 7 5 1 1 + element dispBeamColumn 4 7 8 5 1 1 + element dispBeamColumn 5 8 9 5 1 1 + element dispBeamColumn 6 9 10 5 1 1 + + element zeroLengthInterface2D 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] + fix 5 1 1 0 + fix 10 0 1 0 + + # ---------------------------- + # Start of recorder generation + # ---------------------------- + recorder Node -file reactionForce.out -node 5 10 -time -dof 1 2 reaction; + recorder Node -file Node2.out -node 2 -dof 1 2 -time disp + recorder Node -file Node3.out -node 3 -dof 1 2 -time disp + recorder Element -file Contactele.out -ele 7 -time force + + # -------------------------------------------------------------------- + # Start of static analysis (creation of the analysis & analysis itself) + # -------------------------------------------------------------------- + system SparseGeneral + numberer RCM + constraints Penalty 1.e+018 1.e+018 + test NormDispIncr 1.00e-0010 500 2 + algorithm KrylovNewton + integrator LoadControl 0.1 + analysis Static + + analyze 10 + puts "\ninitiate contact finished" + + wipeAnalysis + + model BasicBuilder -ndm 2 -ndf 2; + loadConst -time 0.0 + remove sp 3 1 + remove sp 3 2 + + pattern Plain 2 Linear { + sp 3 1 1.e-1 + } + + constraints Transformation + test NormDispIncr 1e-7 500 2 + algorithm KrylovNewton + numberer RCM + system ProfileSPD + integrator LoadControl 0.01 + analysis Static + + analyze 100 + puts "\nsliding finished\n" From 1ffc86ceda692c6671d914e01bdf3c0e10b718ba Mon Sep 17 00:00:00 2001 From: XianjueDeng Date: Wed, 5 Mar 2025 12:11:30 -0800 Subject: [PATCH 4/7] Update zeroLengthInterface2DUpdate.rst --- .../elements/zeroLengthInterface2DUpdate.rst | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst index a11cdaa2..732d6570 100644 --- a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst +++ b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst @@ -1,30 +1,35 @@ zeroLengthInterface2DUpdate =========================== -**zeroLengthInterface2DUpdate** fixes bugs in **zeroLengthInterface2D** and adds a new feature that allows the user to change the friction coefficient during the analysis. - -(**zeroLengthInterface2D** was written by Roozbeh Geraili Mikola (roozbehg@berkeley.edu) and Prof. Nicholas Sitar (nsitar@ce.berkeley.edu) on July 02 2010.) +**zeroLengthInterface2DUpdate** is an updated version of **zeroLengthInterface2D**. + +**zeroLengthInterface2DUpdate** has the following improvements: -Bugs fixed in zeroLengthInterface2D -------------------------------------- -1. Incorrect friction behavior when the interface is under cyclic sliding motion. -2. Incorrect normal pressure behavior due to the repetitive search algorithm. The original zeroLengthInterface2D overestimates normal pressure at the interface. +1. Fixed the incorrect friction behavior in **zeroLengthInterface2D** when the interface is under cyclic sliding motion. +2. Fixed the incorrect normal pressure behavior in **zeroLengthInterface2D** due to the repetitive search algorithm. +3. Allows the user to change the friction coefficient during the analysis. + +\* **zeroLengthInterface2D** was written by Roozbeh Geraili Mikola (roozbehg@berkeley.edu) and Prof. Nicholas Sitar (nsitar@ce.berkeley.edu) on July 02 2010. User Instruction ---------------- 1. **Element Command Syntax** - The tcl input command for the zeroLengthInterface2DUpdate element is the same as for zeroLengthInterface2D:: + The tcl input command for the **zeroLengthInterface2DUpdate** element is given below: + + .. code-block:: tcl element zeroLengthInterface2DUpdate eleTag? -sNdNum sNdNum? -pNdNum pNdNum? –dof sdof? mdof? -Nodes Nodes? Kn? Kt? phi? 2. **Tcl Input Example** - .. image:: https://github.com/user-attachments/assets/7833184d-cea4-40ee-9198-c795f353c3d1 + .. image:: https://github.com/user-attachments/assets/ec851ee3-1093-4894-bbaf-b72d0e6b1184 :alt: Tcl input example - **element zeroLengthInterface2DUpdate 1 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi** + .. code-block:: tcl + + element zeroLengthInterface2DUpdate 1 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi *(The above defines a zeroLengthInterface2DUpdate element between a quad element (in blue) and beam elements (in red).)* From 9759c0d5cfda1c7b74236946ca31b8faf7429b1c Mon Sep 17 00:00:00 2001 From: XianjueDeng Date: Wed, 5 Mar 2025 12:13:48 -0800 Subject: [PATCH 5/7] Update zeroLengthInterface2DUpdate.rst --- .../user/manual/model/elements/zeroLengthInterface2DUpdate.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst index 732d6570..6437c4c8 100644 --- a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst +++ b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst @@ -27,11 +27,12 @@ User Instruction .. image:: https://github.com/user-attachments/assets/ec851ee3-1093-4894-bbaf-b72d0e6b1184 :alt: Tcl input example + To define a zeroLengthInterface2DUpdate element between a quad element (in blue) and beam elements (in red). + .. code-block:: tcl element zeroLengthInterface2DUpdate 1 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi - *(The above defines a zeroLengthInterface2DUpdate element between a quad element (in blue) and beam elements (in red).)* 3. **Changing the Friction Coefficient** From c062fe990bda4ebc0f3e3a3d453a245817e63de1 Mon Sep 17 00:00:00 2001 From: XianjueDeng Date: Thu, 6 Mar 2025 09:24:49 -0800 Subject: [PATCH 6/7] Update zeroLengthInterface2DUpdate.rst --- .../user/manual/model/elements/zeroLengthInterface2DUpdate.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst index 6437c4c8..4df760ae 100644 --- a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst +++ b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst @@ -109,7 +109,7 @@ Full TCL Example Code element dispBeamColumn 5 8 9 5 1 1 element dispBeamColumn 6 9 10 5 1 1 - element zeroLengthInterface2D 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] + element zeroLengthInterface2DUpdate 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] fix 5 1 1 0 fix 10 0 1 0 From 644f2b30d2b526ae9f389831e4aafa98ac018afe Mon Sep 17 00:00:00 2001 From: XianjueDeng Date: Thu, 6 Mar 2025 10:18:33 -0800 Subject: [PATCH 7/7] Update zeroLengthInterface2DUpdate.rst --- .../elements/zeroLengthInterface2DUpdate.rst | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst index 4df760ae..81731a73 100644 --- a/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst +++ b/source/user/manual/model/elements/zeroLengthInterface2DUpdate.rst @@ -20,7 +20,23 @@ User Instruction .. code-block:: tcl - element zeroLengthInterface2DUpdate eleTag? -sNdNum sNdNum? -pNdNum pNdNum? –dof sdof? mdof? -Nodes Nodes? Kn? Kt? phi? + element zeroLengthInterface2DUpdate eleTag? -sNdNum sNdNum? -pNdNum pNdNum? –dof sdof? pdof? -Nodes Nodes? Kn? Kt? phi? + + $eleTag: unique element object tag + + $sNdNum: Number of nodes on secondary surface + + $pNdNum: Number of nodes on primary surface + + $sdof $pdof: Nodal degree of freedom for secondary and primary surface + + $Nodes: Secondary and primary node tags respectively + + $Kn: Penalty in normal direction + + $Kt: Penalty in tangential direction + + $phi: Friction angle in degrees 2. **Tcl Input Example** @@ -31,7 +47,7 @@ User Instruction .. code-block:: tcl - element zeroLengthInterface2DUpdate 1 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi + element zeroLengthInterface2DUpdate 1 -sNdNum 6 -pNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi 3. **Changing the Friction Coefficient** @@ -43,14 +59,7 @@ User Instruction set Kn 1e6 set Kt 1e6 set phi_ini 0.0 - element zeroLengthInterface2DUpdate 1 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi_ini - - *(This creates a zeroLengthInterface2DUpdate element with zero friction, and both normal and tangential stiffness equal to 1e6.)* - - Then, update the friction coefficient as follows: - - .. code-block:: tcl - + element zeroLengthInterface2DUpdate 1 -sNdNum 6 -pNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 $Kn $Kt $phi_ini parameter 1 element 1 phi updateParameter 1 [expr 16.7] @@ -109,7 +118,7 @@ Full TCL Example Code element dispBeamColumn 5 8 9 5 1 1 element dispBeamColumn 6 9 10 5 1 1 - element zeroLengthInterface2DUpdate 7 -sNdNum 6 -mNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] + element zeroLengthInterface2DUpdate 7 -sNdNum 6 -pNdNum 2 -dof 3 2 -Nodes 10 9 8 7 6 5 4 1 [expr $Kn] [expr $Kt] [expr $phi] fix 5 1 1 0 fix 10 0 1 0