53 USE format_mod ,
ONLY : fmt_f
54 USE user_id_mod ,
ONLY : id_limit
58#include "implicit_f.inc"
63 TYPE (SUBMODEL_DATA),
INTENT(IN)::LSUBMODEL(NSUBMOD)
73 INTEGER I,ID,N,IWRITE,IERR0,LEN,I1,,K,IREELM,IREELL,IREELT,
74 . IERR1,ID_OPT(NUNIT0+1),IS_M_STRING,IS_L_STRING,IS_T_STRING
75 my_real fac,unite,bid,m_unit,l_unit,t_unit
76 CHARACTER(LEN=NCHARFIELD) :: KEY
77 CHARACTER(LEN=NCHARFIELD) :: FIELD1,FIELD2,FIELD3
78 CHARACTER*20 FIELD11(NUNIT0+NSUBMOD),
79 . FIELD22(NUNIT0+NSUBMOD),
80 . FIELD33(NUNIT0+NSUBMOD),
81 . KEYMSUB, KEYLSUB, KEYTSUB, KEYMISUB, KEYLISUB, KEYTISUB
83 LOGICAL :: IS_AVAILABLE
84 CHARACTER(LEN=NCHARFIELD) :: UNIT_NAME
85 INTEGER NB_BEGIN,SCHAR,SUB_INDEX,NBUNIT_SUB
86 my_real fac_m_sub,fac_l_sub,fac_t_sub
91 DO i = 1, nunit0+nsubmod
98 is_available = .false.
103 unitab%NUNITS = nunit0+nsubmod+1
104 unitab%NUNIT0 = nunit0
105 ALLOCATE(unitab%UNIT_ID(nunit0+nsubmod+1))
106 ALLOCATE(unitab%FAC_M (nunit0+nsubmod+1))
107 ALLOCATE(unitab%FAC_L (nunit0+nsubmod+1))
108 ALLOCATE(unitab%FAC_T (nunit0+nsubmod+1))
130 IF ( flag_key_m > 1)
THEN
131 CALL ancmsg(msgid=575,msgtype=msgerror,anmode=aninfo_blind_1,c1=
'GLOBAL UNIT')
133 IF ( flag_key_l > 1)
THEN
134 CALL ancmsg(msgid=575,msgtype=msgerror,anmode=aninfo_blind_1,c1=
'GLOBAL UNIT')
136 IF ( flag_key_t > 1)
THEN
137 CALL ancmsg(msgid=575,msgtype=msgerror,anmode=aninfo_blind_1,c1=
'GLOBAL UNIT')
140 CALL unit_code(len,keymi,
'MASS' ,fac_m_input, ierr1, 0)
141 CALL unit_code(len,keyli,
'LENGTH',fac_l_input, ierr1, 0)
142 CALL unit_code(len,keyti,
'TIME' ,fac_t_input, ierr1, 0)
143 CALL unit_code(len,keym ,
'MASS' ,fac_m_work , ierr1, 0)
144 IF (fac_m_input == zero) fac_m_input = fac_m_work
145 IF (fac_m_work == zero) fac_m_work = fac_m_input
146 CALL unit_code(len,keyl ,
'LENGTH',fac_l_work , ierr1, 0)
147 IF (fac_l_input == zero) fac_l_input = fac_l_work
148 IF (fac_l_work == zero) fac_l_work = fac_l_input
149 CALL unit_code(len,keyt ,
'TIME' ,fac_t_work , ierr1, 0)
150 IF (fac_t_input == zero) fac_t_input = fac_t_work
151 IF (fac_t_work == zero) fac_t_work = fac_t_input
153 fac_mass = fac_m_work
154 fac_length = fac_l_work
155 fac_time = fac_t_work
157 unitab%FAC_MASS = fac_m_work
158 unitab%FAC_LENGTH = fac_l_work
159 unitab%FAC_TIME = fac_t_work
161 unitab%FAC_M_WORK = fac_m_work
162 unitab%FAC_L_WORK = fac_l_work
163 unitab%FAC_T_WORK = fac_t_work
167 IF (fac_m_input /= fac_m_work .OR.
168 . fac_l_input /= fac_l_work .OR.
169 . fac_t_input /= fac_t_work)
THEN
170 CALL ancmsg(msgid=754,msgtype=msgwarning,anmode=aninfo)
180 IF(unit_name /=
'LENGTH' .AND. unit_name /=
'MASS' .AND. unit_name /=
'TIME')
THEN
185 CALL hm_get_intv(
'IS_M_STRING',is_m_string,is_available,lsubmodel)
186 IF(is_m_string == 1)
THEN
191 CALL hm_get_intv(
'IS_L_STRING',is_l_string,is_available,lsubmodel)
192 IF(is_l_string == 1)
THEN
197 CALL hm_get_intv(
'IS_T_STRING',is_t_string,is_available,lsubmodel)
198 IF(is_t_string == 1)
THEN
204 IF(is_m_string == 1)
THEN
205 CALL unit_code(len,field1,
'MASS',unitab%FAC_M(nunits),ierr0,id)
206 iwrite =
min(ierr0,iwrite)
208 field11(nunits-1)(k:k) = field1(k:k)
211 unitab%FAC_M(nunits) = m_unit
212 field11(nunits-1) =
'N.A'
214 IF(is_l_string == 1)
THEN
215 CALL unit_code(len,field2,
'LENGTH',unitab%FAC_L(nunits),ierr0,id)
216 iwrite =
min(ierr0,iwrite)
218 field22(nunits-1)(k:k) = field2(k:k)
221 unitab%FAC_L(nunits) = l_unit
222 field22(nunits-1) =
'N.A'
224 IF(is_t_string == 1)
THEN
225 CALL unit_code(len,field3,
'TIME',unitab%FAC_T(nunits),ierr0,id)
226 iwrite =
min(ierr0,iwrite)
228 field33(nunits-1)(k:k) = field3(k:k)
231 unitab%FAC_T(nunits) = t_unit
232 field33(nunits-1) =
'N.A'
234 unitab%UNIT_ID(nunits) = id
239 IF (fac_mass == zero)
THEN
240 CALL ancmsg(msgid=574,msgtype=msgerror,anmode=aninfo,i1=id,c1=
'WORK MASS')
242 IF (fac_length == zero)
THEN
243 CALL ancmsg(msgid=574,msgtype=msgerror,anmode=aninfo,i1=id,c1=
'WORK LENGTH')
245 IF (fac_time == zero)
THEN
246 CALL ancmsg(msgid=574,msgtype=msgerror,anmode=aninfo,i1=id,c1=
'WORK TIME')
249 unitab%UNIT_ID(1) = 0
250 unitab%FAC_M(1) = fac_mass
251 unitab%FAC_L(1) = fac_length
252 unitab%FAC_T(1) = fac_time
261 IF (nb_begin /= 0)
THEN
265 IF (sub_index /= 0)
THEN
266 nbunit_sub = nbunit_sub + 1
269 CALL hm_get_string(
'length_inputunit_code',keylisub,schar,is_available)
270 CALL hm_get_string(
'mass_inputunit_code',keymisub,schar,is_available)
271 CALL hm_get_string(
'time_inputunit_code',keytisub,schar,is_available)
272 CALL hm_get_string(
'length_workunit_code',keylsub,schar,is_available)
273 CALL hm_get_string(
'mass_workunit_code',keymsub,schar,is_available)
274 CALL hm_get_string(
'time_workunit_code',keytsub,schar,is_available)
277 CALL ascii_encoding_mu_letter(keylisub, keymisub, keytisub, keylsub, keymsub, keytsub)
280 field11(nunits-1)(k:k) = keymisub(k:k)
283 field22(nunits-1)(k:k) = keylisub(k:k)
286 field33(nunits-1)(k:k) = keytisub(k:k)
289 CALL unit_code(len,keymisub,
'MASS' ,fac_m_sub, ierr1, 0)
290 CALL unit_code(len,keylisub,
'LENGTH',fac_l_sub, ierr1, 0)
291 CALL unit_code(len,keytisub,
'TIME' ,fac_t_sub
293 unitab%UNIT_ID(nunits) = id_limit%UNIT + nbunit_sub
294 unitab%FAC_M(nunits) = fac_m_sub
295 unitab%FAC_L(nunits) = fac_l_sub
296 unitab%FAC_T(nunits) = fac_t_sub
304 IF (iwrite == 1)
THEN
309 READ(keym,err=100,fmt=fmt_f) unite
316 IF (keym(i:i) /=
' ')
EXIT
321 IF (keym(i:i) ==
' ')
EXIT
325 IF ( ireelm /= 1)
THEN
327 keym(k:k) = keym(k+i-j-1:k+i-j-1)
334 READ(keyl,err=200,fmt=fmt_f) unite
341 IF (keyl(i:i) /=
' ')
EXIT
346 IF (keyl(i:i) ==
' ')
EXIT
350 IF ( ireell /= 1)
THEN
352 keyl(k:k) = keyl(k+i-j-1:k+i-j-1)
359 READ(keyt,err=300,fmt=fmt_f) unite
366 IF (keyt(i:i) /=
' ')
EXIT
371 IF (keyt(i:i) ==
' ')
EXIT
375 IF ( ireelt /= 1)
THEN
377 keyt(k:k) = keyt(k+i-j-1:k+i-j-1)
381 IF ( ireelm == 1)
THEN
385 IF ( ireell == 1)
THEN
389 IF ( ireelt == 1)
THEN
393 WRITE(iout,1001) keym,keyl,keyt,fac_mass,fac_length,fac_time
398 READ(keymi,err=700,fmt=fmt_f) unite
405 IF (keymi(i:i) /=
' ')
EXIT
410 IF (keymi(i:i) ==
' ')
EXIT
414 IF ( ireelm /= 1)
THEN
416 keymi(k:k) = keymi(k+i-j-1:k+i-j-1)
423 READ(keyli,err=800,fmt=fmt_f) unite
430 IF (keyli(i:i) /=
' ')
EXIT
435 IF (keyli(i:i) ==
' ')
EXIT
439 IF ( ireell /= 1)
THEN
441 keyli(k:k) = keyli(k+i-j-1:k+i-j-1)
448 READ(keyti,err=900,fmt=fmt_f) unite
455 IF (keyti(i:i) /=
' ')
EXIT
460 IF (keyti(i:i) ==
' ')
EXIT
464 IF ( ireelt /= 1)
THEN
466 keyti(k:k) = keyti(k+i-j-1:k+i-j-1)
470 IF ( ireelm == 1)
THEN
474 IF ( IREELL == 1) THEN
478 IF ( IREELT == 1) THEN
482 WRITE(IOUT,1003) KEYMI,KEYLI,KEYTI,
483 . FAC_M_INPUT,FAC_L_INPUT,FAC_T_INPUT
487 FIELD1(K:K) = FIELD11(I-1)(K:K)
488 FIELD2(K:K) = FIELD22(I-1)(K:K)
489 FIELD3(K:K) = FIELD33(I-1)(K:K)
495 READ(FIELD1,ERR=400,FMT=FMT_F) UNITE
502 IF (FIELD1(I1:I1) /= ' ') EXIT
507 IF (FIELD1(I1:I1) == ' ') EXIT
511 IF ( IREELM /= 1) THEN
513 FIELD1(K:K) = FIELD1(K+I1-J-1:K+I1-J-1)
520 READ(FIELD2,ERR=500,FMT=FMT_F) UNITE
527 IF (FIELD2(I1:I1) /= ' ') EXIT
532 IF (FIELD2(I1:I1) == ' ') EXIT
536 IF ( IREELL /= 1) THEN
538 FIELD2(K:K) = FIELD2(K+I1-J-1:K+I1-J-1)
545 READ(FIELD3,ERR=600,FMT=FMT_F) UNITE
552 IF (FIELD3(I1:I1) /= ' ') EXIT
557 IF (FIELD3(I1:I1) == ' ') EXIT
561 IF ( IREELT /= 1) THEN
563 FIELD3(K:K) = FIELD3(K+I1-J-1:K+I1-J-1)
567 IF ( IREELM == 1) THEN
571 IF ( IREELL == 1) THEN
575 IF ( IREELT == 1) THEN
580 WRITE(IOUT,1002) UNITAB%UNIT_ID(I),FIELD1,FIELD2,FIELD3,
581 . UNITAB%FAC_M(I),UNITAB%FAC_L(I),UNITAB%FAC_T(I)
590 IF (UNITAB%FAC_M(N) == ZERO) THEN
591 UNITAB%FAC_M(N) = ONE
593 UNITAB%FAC_M(N) = UNITAB%FAC_M(N) / UNITAB%FAC_M(1)
596 IF (UNITAB%FAC_L(N) == ZERO) THEN
597 UNITAB%FAC_L(N) = ONE
599 UNITAB%FAC_L(N) = UNITAB%FAC_L(N) / UNITAB%FAC_L(1)
602 IF (UNITAB%FAC_T(N) == ZERO) THEN
603 UNITAB%FAC_T(N) = ONE
605 UNITAB%FAC_T(N) = UNITAB%FAC_T(N) / UNITAB%FAC_T(1)
610 UNITAB%UNIT_ID(1) = 0
611 UNITAB%FAC_M(1) = FAC_M_INPUT / FAC_MASS
612 UNITAB%FAC_L(1) = FAC_L_INPUT / FAC_LENGTH
613 UNITAB%FAC_T(1) = FAC_T_INPUT / FAC_TIME
615 UNITAB%NUNITS = NUNITS
620 . //,' unit systems definition
'/
621 . ' -----------------------
',/
622 ./ 58X,'mass
',16X,'length
',14X,'time
')
624 .(4X, 'work unit system . . . . . .
','(
',A3,',
',A3,',
',A3,' )
',
625 . 1PE20.13,1PE20.13,1PE20.13)
627 .(4X, 'unit system, id =
',I10,' ','(
',A3,',
',A3,',
',A3,' )
',
628 . 1PE20.13,1PE20.13,1PE20.13)
630 .(4X, 'input unit system . . . . .
','(
',A3,',
',A3,',
',A3,' )
',
631 . 1PE20.13,1PE20.13,1PE20.13)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)