43 . SNPC1,NPC1,NDAMP_VREL_RBY,IGRPART,DAMP_RANGE_PART)
53 USE damping_range_compute_param_mod
57#include "implicit_f.inc"
69 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
72 INTEGER,
INTENT(IN) :: SNPC1,NPC1(SNPC1)
73 INTEGER,
INTENT(INOUT) :: NDAMP_VREL_RBY
75 INTEGER,
INTENT(INOUT) :: DAMP_RANGE_PART(NPART)
77 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
78 TYPE (GROUP_) ,
DIMENSION(NGRPART) :: IGRPART
87 INTEGER I,J,ID,JGRN,ISK,FL_VREL,FL_FREQ_RANGE,ITYPE
88 INTEGER NB_PAS,RANGE,FLINT,FLG_PRI,SUB_INDEX
89 INTEGER FUNC_ID,RBODY_ID,IFUN,IGR,GRPART,USR_GRPART
92 .
alpha,beta,alpha_y,beta_y,alpha_z,beta_z,alpha_xx,beta_xx,alpha_yy,
93 . beta_yy,alpha_zz,beta_zz,cdamp_mx,cdamp_my,cdamp_mz,
94 . dv2_mx,dv2_my,dv2_mz,freq,xscale,alpha_x,
95 . cdamp,freq_low,freq_high,maxwell_alpha(3),maxwell_tau(3)
96 CHARACTER(LEN=NCHARTITLE) :: TITR,KEY
98 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
114! dampr(13,i) : alpha_zz
137 is_available = .false.
152 . option_titr = titr,
153 . submodel_index = sub_index,
155 full_format = .false.
171 IF(key(1:5)==
'INTER')
THEN
174 CALL hm_get_intv(
'Nb_time_step',nb_pas,is_available,lsubmodel)
175 CALL hm_get_intv(
'Range',range,is_available,lsubmodel)
176 CALL hm_get_intv(
'grnod_id',jgrn,is_available,lsubmodel)
177 CALL hm_get_intv(
'skew_id',isk,is_available,lsubmodel)
178 IF(isk == 0 .AND. sub_index /= 0 ) isk = lsubmodel(sub_index)%SKEW
179 CALL hm_get_boolv(
'Mass_Damp_Factor_Option',full_format,is_available)
184 CALL hm_get_floatv(
'Beta',beta,is_available,lsubmodel,unitab)
185 CALL hm_get_floatv(
'Tstart',tstart,is_available,lsubmodel,unitab)
186 CALL hm_get_floatv(
'Tstop',tstop,is_available,lsubmodel,unitab)
187 CALL hm_get_floatv(
'Alpha_yy',alpha_yy,is_available,lsubmodel,unitab)
188 CALL hm_get_floatv(
'Beta_yy',beta_yy,is_available,lsubmodel,unitab)
189 CALL hm_get_floatv(
'Alpha_zz',alpha_zz,is_available,lsubmodel,unitab)
190 CALL hm_get_floatv(
'Beta_zz',beta_zz,is_available,lsubmodel,unitab)
192 IF (nb_pas == 0) nb_pas = 20
194 WRITE(iout,1400) nb_pas
195 WRITE(iout,1600) range
196 idamp_rdof = idamp_rdof+1
201 ELSEIF(key(1:4).EQ.
'VREL')
THEN
208 CALL hm_get_intv(
'skew_id',isk,is_available,lsubmodel)
209 IF(isk == 0 .AND. sub_index .NE. 0 ) isk = lsubmodel(sub_index)%SKEW
210 CALL hm_get_intv(
'RbodyID',rbody_id,is_available,lsubmodel)
211 CALL hm_get_intv(
'FuncID',func_id,is_available,lsubmodel)
215 CALL hm_get_floatv(
'Tstart',tstart,is_available,lsubmodel,unitab)
216 CALL hm_get_floatv(
'Tstop',tstop,is_available,lsubmodel,unitab)
217 CALL hm_get_floatv(
'Freq',freq,is_available,lsubmodel,unitab)
218 CALL hm_get_floatv(
'Xscale',xscale,is_available,lsubmodel,unitab)
219 CALL hm_get_floatv(
'Alpha_x',cdamp_mx,is_available,lsubmodel,unitab)
220 CALL hm_get_floatv(
'Alpha_y',cdamp_my,is_available,lsubmodel,unitab)
221 CALL hm_get_floatv(
'Alpha_z',cdamp_mz,is_available,lsubmodel,unitab)
222 CALL hm_get_floatv(
'Alpha2_x',dv2_mx,is_available,lsubmodel,unitab)
223 CALL hm_get_floatv(
'Alpha2_y',dv2_my,is_available,lsubmodel,unitab)
224 CALL hm_get_floatv(
'Alpha2_z',dv2_mz,is_available,lsubmodel,unitab)
226 IF (cdamp_my == zero) cdamp_my = cdamp_mx
227 IF (cdamp_mz == zero) cdamp_mz = cdamp_mx
228 IF (dv2_my == zero) dv2_my = dv2_mx
229 IF (dv2_mz == zero) dv2_mz = dv2_mx
230 IF (xscale == zero) xscale = one
234 IF (rbody_id /= 0)
THEN
235 ndamp_vrel_rby = ndamp_vrel_rby + 1
240 IF (func_id /= 0)
THEN
242 IF (func_id == npc1(j))
THEN
264 dampr(25,i) = rbody_id
269 ELSEIF(key(1:4).EQ.
'FREQ')
THEN
278 CALL hm_get_intv(
'grpart_id',grpart,is_available,lsubmodel)
283 IF (igrpart(j)%ID == grpart)
THEN
291 . anmode=aninfo_blind_1,
297 DO j=1,igrpart(igr)%NENTITY
298 damp_range_part(igrpart(igr)%ENTITY(j)) = i
303 damp_range_part(j) = i
314 CALL hm_get_floatv(
'Cdamp',cdamp,is_available,lsubmodel,unitab)
315 CALL hm_get_floatv(
'Tstart',tstart,is_available,lsubmodel,unitab)
316 CALL hm_get_floatv(
'Tstop',tstop,is_available,lsubmodel,unitab)
317 CALL hm_get_floatv(
'Freq_low',freq_low,is_available,lsubmodel,unitab)
318 CALL hm_get_floatv(
'Freq_high',freq_high,is_available,lsubmodel,unitab)
320 ELSEIF(key(1:5).EQ.
'FUNCT')
THEN
326 CALL hm_get_intv(
'grnod_id',jgrn,is_available,lsubmodel)
327 CALL hm_get_intv(
'FuncID',func_id,is_available,lsubmodel)
332 CALL hm_get_floatv(
'Alpha_x',alpha_x,is_available,lsubmodel,unitab)
333 CALL hm_get_floatv(
'Alpha_y',alpha_y,is_available,lsubmodel,unitab)
335 CALL hm_get_floatv(
'Alpha_xx',alpha_xx,is_available,lsubmodel,unitab)
336 CALL hm_get_floatv(
'Alpha_yy',alpha_yy,is_available,lsubmodel,unitab)
337 CALL hm_get_floatv(
'Alpha_zz',alpha_zz,is_available,lsubmodel,unitab)
347 IF (func_id /= 0)
THEN
349 IF (func_id == npc1(j))
THEN
363 dampr(4:nrdamp,i) = zero
369 CALL hm_get_intv(
'grnod_id',jgrn,is_available,lsubmodel)
370 CALL hm_get_intv(
'skew_id',isk,is_available,lsubmodel)
371 IF(isk == 0 .AND. sub_index /= 0 ) isk = lsubmodel(sub_index)%SKEW
372 CALL hm_get_boolv(
'Mass_Damp_Factor_Option',full_format,is_available)
378 CALL hm_get_floatv(
'Tstart',tstart,is_available,lsubmodel,unitab)
379 CALL hm_get_floatv(
'Tstop',tstop,is_available,lsubmodel,unitab)
380 CALL hm_get_floatv(
'Alpha_y',alpha_y,is_available,lsubmodel,unitab)
381 CALL hm_get_floatv(
'Beta_y',beta_y,is_available,lsubmodel,unitab)
382 CALL hm_get_floatv(
'Alpha_z',alpha_z,is_available,lsubmodel,unitab)
383 CALL hm_get_floatv(
'Beta_z',beta_z,is_available,lsubmodel,unitab)
384 CALL hm_get_floatv(
'Alpha_xx',alpha_xx,is_available,lsubmodel,unitab)
385 CALL hm_get_floatv(
'Beta_xx',beta_xx,is_available,lsubmodel,unitab)
386 CALL hm_get_floatv(
'Alpha_yy',alpha_yy,is_available,lsubmodel,unitab)
387 CALL hm_get_floatv(
'Beta_yy',beta_yy,is_available,lsubmodel,unitab)
388 CALL hm_get_floatv(
'Alpha_zz',alpha_zz,is_available,lsubmodel,unitab)
389 CALL hm_get_floatv(
'Beta_zz',beta_zz,is_available,lsubmodel,unitab)
398 IF(isk == iskn(4,j+1))
THEN
403 CALL ancmsg(msgid=137,anmode=aninfo,msgtype=msgerror,
406 . i1=id,i2=isk,c3=titr)
410 IF (tstop == zero) tstop=ep30
413 IF (fl_freq_range == 0)
THEN
414 ingr2usr => igrnod(1:ngrnod)%ID
415 igr = ngr2usr(jgrn,ingr2usr,ngrnod)
436.NOT.
IF ( FULL_FORMAT) THEN
456 WRITE (IOUT,1100) JGRN,ALPHA,BETA,FACTB,TSTART,TSTOP
467 DAMPR(9,I) = ALPHA_XX
468 DAMPR(10,I) = BETA_XX
469 DAMPR(11,I) = ALPHA_YY
470 DAMPR(12,I) = BETA_YY
471 DAMPR(13,I) = ALPHA_ZZ
472 DAMPR(14,I) = BETA_ZZ
473 WRITE (IOUT,1200) JGRN,ISKN(4,ISK),
474 . ALPHA,BETA,ALPHA_Y,BETA_Y,ALPHA_Z,BETA_Z,
475 . ALPHA_XX,BETA_XX,ALPHA_YY,BETA_YY,ALPHA_ZZ,BETA_ZZ,
486 DAMPR(11,I) = ALPHA_YY
487 DAMPR(12,I) = BETA_YY
488 DAMPR(13,I) = ALPHA_ZZ
489 DAMPR(14,I) = BETA_ZZ
490 WRITE (IOUT,1500) JGRN,ISKN(4,ISK),
491 . ALPHA,BETA,ALPHA_YY,BETA_YY,
492 . ALPHA_ZZ,BETA_ZZ,TSTART,TSTOP
494 DAMPR(3,I) = CDAMP_MX
496 DAMPR(5,I) = CDAMP_MY
498 DAMPR(7,I) = CDAMP_MZ
506 WRITE (IOUT,1800) JGRN,ISKN(4,ISK),RBODY_ID,FUNC_ID,
507 . CDAMP_MX,CDAMP_MY,CDAMP_MZ,
508 . DV2_MX,DV2_MY,DV2_MZ,
513 CASE(3) !/DAMP/FREQUENCY_RANGE
514 WRITE (IOUT,2000) GRPART,CDAMP,FREQ_LOW,FREQ_HIGH,TSTART,TSTOP
516 CALL damping_range_compute_param(CDAMP,FREQ_LOW,FREQ_HIGH,MAXWELL_ALPHA,MAXWELL_TAU)
519 DAMPR(32:34,I) = MAXWELL_ALPHA(1:3)
520 DAMPR(35:37,I) = MAXWELL_TAU(1:3)
527 DAMPR(9,I) = ALPHA_XX
528 DAMPR(11,I) = ALPHA_YY
529 DAMPR(13,I) = ALPHA_ZZ
530 DAMPR(26,I) = IFUN ! take care of IFUN in split
531 DAMPR(32,I) = ALPHA_X
532 DAMPR(33,I) = ALPHA_Y
533 DAMPR(34,I) = ALPHA_Z
534 DAMPR(35,I) = ALPHA_XX
535 DAMPR(36,I) = ALPHA_YY
536 DAMPR(37,I) = ALPHA_ZZ
537 WRITE (IOUT,2200) JGRN,IFUN,ALPHA,
538 . ALPHA_X,ALPHA_Y,ALPHA_Z,
539 . ALPHA_XX,ALPHA_YY,ALPHA_ZZ
541.NOT.
END IF !( FULL_FORMAT) THEN
549 . ' ----------------------
')
550 1100 FORMAT( 8X,'node group id . . . . . . . . .
',I10
551 . /10X,'alpha. . . . . . . . . . . . . .
',1PG20.13
552 . /10X,'beta . . . . . . . . . . . . . .
',1PG20.13
553 . /10X,'max time step factor . . . . . .
',1PG20.13
554 . /10X,'start time . . . . . . . . . . .
',1PG20.13
555 . /10X,'stop time . . . . . . . . . . .
',1PG20.13)
556 1200 FORMAT( 10X,'node group id . . . . . . . . .
',I10
557 . /10X,'skew id . . . . . . . . . . .
',I10
558 . /10X,'alpha in x-direction. . . . . .
',1PG20.13
559 . /10X,'beta in x-direction. . . . . .
',1PG20.13
560 . /10X,'alpha in y-direction. . . . . .
',1PG20.13
561 . /10X,'beta in y-direction. . . . . .
',1PG20.13
562 . /10X,'alpha in z-direction. . . . . .
',1PG20.13
563 . /10X,'beta in z-direction. . . . . .
',1PG20.13
564 . /10X,'alpha in rx-direction . . . . .
',1PG20.13
565 . /10X,'beta in rx-direction . . . . .
',1PG20.13
566 . /10X,'alpha in ry-direction . . . . .
',1PG20.13
567 . /10X,'beta in ry-direction . . . . .
',1PG20.13
568 . /10X,'alpha in rz-direction . . . . .
',1PG20.13
569 . /10X,'beta in rz-direction . . . . .
',1PG20.13
570 . /10X,'start time . . . . . . . . . . .
',1PG20.13
571 . /10X,'stop time . . . . . . . . . . .
',1PG20.13)
572 1300 FORMAT(/,10X,'selective rayleigh
damping on contact nodes
')
573 1400 FORMAT( 10X,'number of time step . . . . . .
',I10,/)
574 1500 FORMAT( 10X,'node group id . . . . . . . . .
',I10
575 . /10X,'skew id . . . . . . . . . . .
',I10
576 . /10X,'alpha in rx-direction . . . . .
',1PG20.13
577 . /10X,'beta in rx-direction . . . . .
',1PG20.13
578 . /10X,'alpha in ry-direction . . . . .
',1PG20.13
579 . /10X,'beta in ry-direction . . . . .
',1PG20.13
580 . /10X,'alpha in rz-direction . . . . .
',1PG20.13
581 . /10X,'beta in rz-direction . . . . .
',1PG20.13
582 . /10X,'start time . . . . . . . . . . .
',1PG20.13
583 . /10X,'stop time . . . . . . . . . . .
',1PG20.13)
584 1600 FORMAT( 10X,'extension of nodes selection .
',I10,/)
585 1700 FORMAT(/,10X,'rayleigh
damping with relative velocities
')
586 1800 FORMAT( 10X,'node group id . . . . . . . . .
',I10
587 . /10X,'skew id . . . . . . . . . . . .
',I10
588 . /10X,'rbody id . . . . . . . . . . . ',i10
589 . /10x,
'DAMPING FUNCTION ID . . . . . .',i10
590 . /10x,
'MASS DAMPING COEFFICIENT IN X-DIRECTION. . . . . .',1pg20.13
591 . /10x,
'MASS DAMPING COEFFICIENT IN Y-DIRECTION. . . . . .',1pg20.13
592 . /10x,
'MASS DAMPING COEFFICIENT IN Z-DIRECTION. . . . . .',1pg20.13
593 . /10x,
'QUADRATIC MASS DAMPING COEFFICIENT IN X-DIRECTION.',1pg20.13
594 . /10x,
'QUADRATIC MASS DAMPING COEFFICIENT IN Y-DIRECTION.',1pg20.13
595 . /10x,
'QUADRATIC MASS DAMPING COEFFICIENT IN Z-DIRECTION.',1pg20.13
596 . /10x,
'DAMPING FREQUENCY . . . . . . . . . . . . . . . . ',1pg20.13
597 . /10x,
'START TIME . . . . . . . . . . . . . . . . . . . .',1pg20.13
598 . /10x,
'STOP TIME . . . . . . . . . . . . . . . . . . . .',1pg20.13)
599 1900
FORMAT(/,10x,
'DAMPING OVER FREQUENCY RANGE')
600 2000
FORMAT( 10x,
'PART GROUP ID . . . . . . . . .',i10
601 . /10x,
'DAMPING RATIO . . . . . . . . . . . . . . . . . . ',1pg20.13
602 . /10x,
'LOWEST FREQUENCY . . . . . . . . . . . . . . . . .',1pg20.13
603 . /10x,
'HIGHEST FREQUENCY. . . . . . . . . . . . . . . . .',1pg20.13
604 . /10x,
'START TIME . . . . . . . . . . . . . . . . . . . .',1pg20.13
605 . /10x,
'STOP TIME . . . . . . . . . . . . . . . . . . . .',1pg20.13)
606 2100
FORMAT(/,10x,
'MASS DAMPING WITH INPUT FUNCTION')
607 2200
FORMAT( 10x,
'NODE GROUP ID . . . . . . . . . . . . . . . . . .',i10
608 . /10x,
'ALPHA FUNCTION ID . . . . . . . . . . . . . . . .',i10
609 . /10x,
'ALPHA FUNCTION ORDINATE SCALE FACTOR . . . . . . ',1pg20.13
610 . /10x,
'MASS DAMPING COEFFICIENT IN X-DIRECTION. . . . . ',1pg20.13
611 . /10x,
'MASS DAMPING COEFFICIENT IN Y-DIRECTION. . . . . ',1pg20.13
612 . /10x,
'MASS DAMPING COEFFICIENT IN Z-DIRECTION. . . . . ',1pg20.13
613 . /10x,
'MASS DAMPING COEFFICIENT IN RX-DIRECTION. . . . .',1pg20.13
614 . /10x,
'MASS DAMPING COEFFICIENT IN RY-DIRECTION. . . . .',1pg20.13
615 . /10x,
'MASS DAMPING COEFFICIENT IN RZ-DIRECTION. . . . .',1pg20.13)