c user amplitude subroutine VUAMP (Nur ABAQUS/EXPLIZIT): c User-Soubroutine zum Beenden des aktuellen Steps, wenn c die Reaktionskraft in z-Richtung bei Entlastung im c Gleichgewicht ist. Nach Beenden soll mit dem nächsten Step c (iConcludeStep-Funktion) weiterverfahren werden. c ------------------------Script-Kopf------------------------ subroutine vuamp( c state variables * ampName, time, ampValueOld, dt, nSvars, svars, lFlagsInfo, * nSensor, sensorValues, sensorNames, jSensorLookUpTable, c to be defined * ampValueNew, * lFlagsDefine, * AmpDerivative, AmpSecDerivative, AmpIncIntegral) include 'vaba_param.inc' c svars - additional state variables dimension sensorValues(nSensor), svars(nSvars) character*80 sensorNames(nSensor) character*80 ampName c time indices parameter (iStepTime = 1, * iTotalTime = 2, * nTime = 2) c flags passed in for information parameter (iInitialization = 1, * iRegularInc = 2, * ikStep = 3, c ikStep - zusätzlich in Kopf eingefügt um derzeitigen Step c abfragen zu können. * nFlagsInfo = 3) c optional flags to be defined parameter (iComputeDeriv = 1, * iComputeSecDeriv = 2, * iComputeInteg = 3, * iStopAnalysis = 4, * iConcludeStep = 5, c iConcludeStep - zusätzlich neben iStopAnalysis, damit c kein Restart notwendig ist, sondern einfach mit dem c nächsten Step weiterverfahren kann c (solange nur ABAQUS/EXPLIZIT verwendet wird) * nFlagsDefine = 5) dimension time(nTime), lFlagsInfo(nFlagsInfo), * lFlagsDefine(nFlagsDefine) dimension jSensorLookUpTable(*) c ------------------------INPUT-Einträge------------------------ c Es müssen folgende Änderungen an der Input-Datei c vorgenommen werden: c (i) Ein Nodeset mit den abzufragenden Knoten/Referenzpunkt c *NSET,nset=RP c (ii) Als Sensor fungierender History Output in **STEP c *Output, history, sensor, name=SENSOR c *Node Output, nset=RP c RF2 c (iii) Zusätzlich(!) zur Smooth-Amplitude, weitere Amplitude c *Amplitude,name=temp,definition=USER,variables=1 c ------------------------Fortran-Code------------------------ c Einlesen der Sensordaten und zwischenspeichern in temp_sensor c iR_2 = IVGETSENSORID('SENSOR',jSensorLookUpTable) c temp_sensor=sensorValues(iR_2) iR_3 = IVGETSENSORID('SENSOR2',jSensorLookUpTable) temp_sensor2=sensorValues(iR_3) c ********** Kraftsteuerung c if (lFlagsInfo(ikStep) .eq. 2 .or. lFlagsInfo(ikStep) .eq. 4) then c if (lFlagsInfo(iInitialization) .eq. 1) then c ampValueNew = 0.0 c lFlagsDefine(iConcludeStep) = 0 c else c if(temp_sensor .gt. 0.1) then c lFlagsDefine(iConcludeStep)=1 c end if c end if c end if c ********** Verschiebungssteuerung c *** 1. Loading *** if(lFlagsInfo(ikStep) .eq. 1 ) then if(lFlagsInfo(iInitialization) .eq. 1) then ampValueNew = 0.0 lFlagsDefine(iConcludeStep) = 0 else if(temp_sensor2 .lt. -2) then lFlagsDefine(iConcludeStep)=1 end if end if c *** 1. Unloading *** else if(lFlagsInfo(ikStep) .eq. 2 ) then if(lFlagsInfo(iInitialization) .eq. 1) then ampValueNew = 0.0 lFlagsDefine(iConcludeStep) = 0 else if(temp_sensor2 .gt. -1.4282) then lFlagsDefine(iConcludeStep)=1 end if end if c *** 2. Loading *** else if(lFlagsInfo(ikStep) .eq. 3 ) then if(lFlagsInfo(iInitialization) .eq. 1) then ampValueNew = 0.0 lFlagsDefine(iConcludeStep) = 0 else if(temp_sensor2 .lt. -6.4282) then lFlagsDefine(iConcludeStep)=1 end if end if c *** 2. Unloading *** else if(lFlagsInfo(ikStep) .eq. 4 ) then if(lFlagsInfo(iInitialization) .eq. 1) then ampValueNew = 0.0 lFlagsDefine(iConcludeStep) = 0 else if(temp_sensor2 .gt. -5.91061) then lFlagsDefine(iConcludeStep)=1 end if end if end if end subroutine vuamp