54 USE format_mod ,
ONLY : fmt_f
55 USE user_id_mod ,
ONLY : id_limit
56 USE ascii_encoding_mu_letter_mod
60#include "implicit_f.inc"
64 TYPE (UNIT_TYPE_) ::UNITAB
65 TYPE (SUBMODEL_DATA),
INTENT(IN)::LSUBMODEL()
75 INTEGER ,ID,N,,IERR0,LEN,I1,J,K,IREELM,IREELL,IREELT,
76 . IERR1,ID_OPT(NUNIT0+1),IS_M_STRING,IS_L_STRING,IS_T_STRING
77 my_real unite, bid, m_unit, l_unit, t_unit
78 CHARACTER(LEN=NCHARFIELD) :: KEY
79 CHARACTER(LEN=NCHARFIELD) :: FIELD1,FIELD2,FIELD3
80 CHARACTER*20 FIELD11(NUNIT0+NSUBMOD),
81 . FIELD22(NUNIT0+NSUBMOD),
82 . FIELD33(NUNIT0+NSUBMOD),
83 . KEYMSUB, KEYLSUB, KEYTSUB, KEYMISUB, KEYLISUB, KEYTISUB
85 LOGICAL :: IS_AVAILABLE
86 CHARACTER(LEN=NCHARFIELD) :: UNIT_NAME
87 INTEGER NB_BEGIN,SCHAR,SUB_INDEX,NBUNIT_SUB
88 my_real fac_m_sub,fac_l_sub,fac_t_sub
93 DO i = 1, nunit0+nsubmod
100 is_available = .false.
105 unitab%NUNITS = nunit0+nsubmod+1
106 unitab%NUNIT0 = nunit0
107 ALLOCATE(unitab%UNIT_ID(nunit0+nsubmod+1))
108 ALLOCATE(unitab%FAC_M (nunit0+nsubmod+1))
109 ALLOCATE(unitab%FAC_L (nunit0+nsubmod+1))
110 ALLOCATE(unitab%FAC_T (nunit0+nsubmod+1))
132 IF ( flag_key_m > 1)
THEN
133 CALL ancmsg(msgid=575,msgtype=msgerror,anmode=aninfo_blind_1,c1=
'GLOBAL UNIT')
135 IF ( flag_key_l > 1)
THEN
136 CALL ancmsg(msgid=575,msgtype=msgerror,anmode=aninfo_blind_1,c1=
'GLOBAL UNIT')
138 IF ( flag_key_t > 1)
THEN
139 CALL ancmsg(msgid=575,msgtype=msgerror,anmode=aninfo_blind_1,c1=
'GLOBAL UNIT')
142 CALL unit_code(len,keymi,
'MASS' ,fac_m_input, ierr1, 0)
143 CALL unit_code(len,keyli,
'LENGTH',fac_l_input, ierr1, 0)
144 CALL unit_code(len,keyti,
'TIME' ,fac_t_input, ierr1, 0)
145 CALL unit_code(len,keym ,
'MASS' ,fac_m_work , ierr1, 0)
146 IF (fac_m_input == zero) fac_m_input = fac_m_work
147 IF (fac_m_work == zero) fac_m_work = fac_m_input
148 CALL unit_code(len,keyl ,
'LENGTH',fac_l_work , ierr1, 0)
149 IF (fac_l_input == zero) fac_l_input = fac_l_work
150 IF (fac_l_work == zero) fac_l_work = fac_l_input
151 CALL unit_code(len,keyt ,
'TIME' ,fac_t_work , ierr1, 0)
152 IF (fac_t_input == zero) fac_t_input = fac_t_work
153 IF (fac_t_work == zero) fac_t_work = fac_t_input
155 fac_mass = fac_m_work
156 fac_length = fac_l_work
157 fac_time = fac_t_work
159 unitab%FAC_MASS = fac_m_work
160 unitab%FAC_LENGTH = fac_l_work
161 unitab%FAC_TIME = fac_t_work
163 unitab%FAC_M_WORK = fac_m_work
164 unitab%FAC_L_WORK = fac_l_work
165 unitab%FAC_T_WORK = fac_t_work
169 IF (fac_m_input /= fac_m_work .OR.
170 . fac_l_input /= fac_l_work .OR.
171 . fac_t_input /= fac_t_work)
THEN
172 CALL ancmsg(msgid=754,msgtype=msgwarning,anmode=aninfo)
182 IF(unit_name /=
'LENGTH' .AND. unit_name /=
'MASS' .AND. unit_name /=
'TIME')
THEN
187 CALL hm_get_intv(
'IS_M_STRING',is_m_string,is_available,lsubmodel)
188 IF(is_m_string == 1)
THEN
193 CALL hm_get_intv(
'IS_L_STRING',is_l_string,is_available,lsubmodel)
194 IF(is_l_string == 1)
THEN
199 CALL hm_get_intv(
'IS_T_STRING',is_t_string,is_available,lsubmodel)
200 IF(is_t_string == 1)
THEN
206 IF(is_m_string == 1)
THEN
207 CALL unit_code(len,field1,
'MASS',unitab%FAC_M(nunits),ierr0,id)
208 iwrite =
min(ierr0,iwrite)
210 field11(nunits-1)(k:k) = field1(k:k)
213 unitab%FAC_M(nunits) = m_unit
214 field11(nunits-1) =
'N.A'
216 IF(is_l_string == 1)
THEN
217 CALL unit_code(len,field2,
'LENGTH',unitab%FAC_L(nunits),ierr0,id)
218 iwrite =
min(ierr0,iwrite)
220 field22(nunits-1)(k:k) = field2(k:k)
223 unitab%FAC_L(nunits) = l_unit
224 field22(nunits-1) =
'N.A'
226 IF(is_t_string == 1)
THEN
227 CALL unit_code(len,field3,
'TIME',unitab%FAC_T(nunits),ierr0,id)
228 iwrite =
min(ierr0,iwrite)
230 field33(nunits-1)(k:k) = field3(k:k)
233 unitab%FAC_T(nunits) = t_unit
234 field33(nunits-1) =
'N.A'
236 unitab%UNIT_ID(nunits) = id
241 IF (fac_mass == zero)
THEN
242 CALL ancmsg(msgid=574,msgtype=msgerror,anmode=aninfo,i1=id,c1=
'WORK MASS')
244 IF (fac_length == zero)
THEN
245 CALL ancmsg(msgid=574,msgtype=msgerror,anmode=aninfo,i1=id,c1=
'WORK LENGTH')
247 IF (fac_time == zero)
THEN
248 CALL ancmsg(msgid=574,msgtype=msgerror,anmode=aninfo,i1=id,c1=
'WORK TIME')
251 unitab%UNIT_ID(1) = 0
252 unitab%FAC_M(1) = fac_mass
253 unitab%FAC_L(1) = fac_length
254 unitab%FAC_T(1) = fac_time
263 IF (nb_begin /= 0)
THEN
267 IF (sub_index /= 0)
THEN
268 nbunit_sub = nbunit_sub + 1
271 CALL hm_get_string(
'length_inputunit_code',keylisub,schar,is_available)
272 CALL hm_get_string(
'mass_inputunit_code',keymisub,schar,is_available)
273 CALL hm_get_string(
'time_inputunit_code',keytisub,schar,is_available)
274 CALL hm_get_string(
'length_workunit_code',keylsub,schar,is_available)
275 CALL hm_get_string(
'mass_workunit_code',keymsub,schar,is_available)
276 CALL hm_get_string(
'time_workunit_code',keytsub,schar,is_available)
279 CALL ascii_encoding_mu_letter(keylisub, keymisub, keytisub, keylsub, keymsub, keytsub)
282 field11(nunits-1)(k:k) = keymisub(k:k)
285 field22(nunits-1)(k:k) = keylisub(k:k)
288 field33(nunits-1)(k:k) = keytisub(k:k)
291 CALL unit_code(len,keymisub,
'MASS' ,fac_m_sub, ierr1, 0)
292 CALL unit_code(len,keylisub,
'LENGTH',fac_l_sub, ierr1, 0)
293 CALL unit_code(len,keytisub,
'TIME' ,fac_t_sub, ierr1, 0)
295 unitab%UNIT_ID(nunits) = id_limit%UNIT + nbunit_sub
296 unitab%FAC_M(nunits) = fac_m_sub
297 unitab%FAC_L(nunits) = fac_l_sub
298 unitab%FAC_T(nunits) = fac_t_sub
306 IF (iwrite == 1)
THEN
311 READ(keym,err=100,fmt=fmt_f) unite
318 IF (keym(i:i) /=
' ')
EXIT
323 IF (keym(i:i) ==
' ')
EXIT
327 IF ( ireelm /= 1)
THEN
329 keym(k:k) = keym(k+i-j-1:k+i-j-1)
336 READ(keyl,err=200,fmt=fmt_f) unite
343 IF (keyl(i:i) /=
' ')
EXIT
348 IF (keyl(i:i) ==
' ')
EXIT
352 IF ( ireell /= 1)
THEN
354 keyl(k:k) = keyl(k+i-j-1:k+i-j-1)
361 READ(keyt,err=300,fmt=fmt_f) unite
368 IF (keyt(i:i) /=
' ')
EXIT
373 IF (keyt(i:i) ==
' ')
EXIT
377 IF ( ireelt /= 1)
THEN
379 keyt(k:k) = keyt(k+i-j-1:k+i-j-1)
383 IF ( ireelm == 1)
THEN
387 IF ( ireell == 1)
THEN
391 IF ( ireelt == 1)
THEN
395 WRITE(iout,1001) keym,keyl,keyt,fac_mass,fac_length,fac_time
400 READ(keymi,err=700,fmt=fmt_f) unite
407 IF (keymi(i:i) /=
' ')
EXIT
412 IF (keymi(i:i) ==
' ')
EXIT
416 IF ( ireelm /= 1)
THEN
418 keymi(k:k) = keymi(k+i-j-1:k+i-j-1)
425 READ(keyli,err=800,fmt=fmt_f) unite
432 IF (keyli(i:i) /=
' ')
EXIT
437 IF (keyli(i:i) ==
' ')
EXIT
441 IF ( ireell /= 1)
THEN
443 keyli(k:k) = keyli(k+i-j-1:k+i-j-1)
450 READ(keyti,err=900,fmt=fmt_f) unite
457 IF (keyti(i:i) /=
' ')
EXIT
462 IF (keyti(i:i) ==
' ')
EXIT
466 IF ( ireelt /= 1)
THEN
468 keyti(k:k) = keyti(k+i-j-1:k+i-j-1)
472 IF ( ireelm == 1)
THEN
476 IF ( ireell == 1)
THEN
480 IF ( ireelt == 1)
THEN
484 WRITE(iout,1003) keymi,keyli,keyti,
485 . fac_m_input,fac_l_input,fac_t_input
489 field1(k:k) = field11(i-1)(k:k)
490 field2(k:k) = field22(i-1)(k:k)
491 field3(k:k) = field33(i-1)(k:k)
497 READ(field1,err=400,fmt=fmt_f) unite
504 IF (field1(i1:i1) /=
' ')
EXIT
509 IF (field1(i1:i1) ==
' ')
EXIT
513 IF ( ireelm /= 1)
THEN
515 field1(k:k) = field1(k+i1-j-1:k+i1-j-1)
522 READ(field2,err=500,fmt=fmt_f) unite
529 IF (field2(i1:i1) /=
' ')
EXIT
534 IF (field2(i1:i1) ==
' ')
EXIT
538 IF ( ireell /= 1)
THEN
540 field2(k:k) = field2(k+i1-j-1:k+i1-j-1)
547 READ(field3,err=600,fmt=fmt_f) unite
554 IF (field3(i1:i1) /=
' ')
EXIT
559 IF (field3(i1:i1) ==
' ')
EXIT
563 IF ( ireelt /= 1)
THEN
565 field3(k:k) = field3(k+i1-j-1:k+i1-j-1)
569 IF ( ireelm == 1)
THEN
573 IF ( ireell == 1)
THEN
577 IF ( ireelt == 1)
THEN
582 WRITE(iout,1002) unitab%UNIT_ID(i),field1,field2,field3,
583 . unitab%FAC_M(i),unitab%FAC_L(i),unitab%FAC_T(i)
592 IF (unitab%FAC_M(n) == zero)
THEN
593 unitab%FAC_M(n) = one
595 unitab%FAC_M(n) = unitab%FAC_M(n) / unitab%FAC_M(1)
598 IF (unitab%FAC_L(n) == zero)
THEN
599 unitab%FAC_L(n) = one
601 unitab%FAC_L(n) = unitab%FAC_L(n) / unitab%FAC_L(1)
604 IF (unitab%FAC_T(n) == zero)
THEN
605 unitab%FAC_T(n) = one
607 unitab%FAC_T(n) = unitab%FAC_T(n) / unitab%FAC_T(1)
612 unitab%UNIT_ID(1) = 0
613 unitab%FAC_M(1) = fac_m_input / fac_mass
614 unitab%FAC_L(1) = fac_l_input / fac_length
615 unitab%FAC_T(1) = fac_t_input / fac_time
617 unitab%NUNITS = nunits
622 . //,
' UNIT SYSTEMS DEFINITION '/
623 .
' ----------------------- ',/
624 ./ 58x,
'MASS',16x,
'LENGTH',14x,
'TIME')
626 .(4x,
'WORK UNIT SYSTEM . . . . . . ',
'( ',a3,
', ',a3,
', ',a3,
' )',
627 . 1pe20.13,1pe20.13,1pe20.13)
629 .(4x,
'UNIT SYSTEM, ID = ',i10,
' ',
'( ',a3,
', ',a3,
', ',a3,
' )',
630 . 1pe20.13,1pe20.13,1pe20.13)
632 .(4x,
'INPUT UNIT SYSTEM . . . . . ',
'( ',a3,
', ',a3,
', ',a3
' )'
633 . 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)