Routine to convert scaled iteration variables back to their real values author: P J Knight, CCFE, Culham Science Centre author: J Morris, CCFE, Culham Science Centre xc(ipnvars) : input/output real array : scaled iteration variable values nn : input integer : number of iteration variables This subroutine converts the scaled iteration variables back to their real values.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in), | dimension(:) | :: | xc | ||
integer, | intent(in) | :: | nn |
subroutine convxc(xc,nn)
!! Routine to convert scaled iteration variables back to
!! their real values
!! author: P J Knight, CCFE, Culham Science Centre
!! author: J Morris, CCFE, Culham Science Centre
!! xc(ipnvars) : input/output real array : scaled iteration variable values
!! nn : input integer : number of iteration variables
!! This subroutine converts the scaled iteration variables back to
!! their real values.
!
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
use error_handling, only: idiags, fdiags, report_error
use numerics, only: ipnvars, scale, ixc, lablxc
use maths_library, only: variable_error
#ifndef dp
use, intrinsic :: iso_fortran_env, only: dp=>real64
#endif
implicit none
! Arguments
integer, intent(in) :: nn
real(dp), dimension(:), intent(in) :: xc
! Local variables
integer :: i
real(dp)::ratio
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
do i = 1,nn
ratio = xc(i)/scale(i)
select case (ixc(i))
case (1); call set_itv_1(ratio)
case (2); call set_itv_2(ratio)
case (3); call set_itv_3(ratio)
case (4); call set_itv_4(ratio)
case (5); call set_itv_5(ratio)
case (6); call set_itv_6(ratio)
case (7); call set_itv_7(ratio)
case (8); call set_itv_8(ratio)
case (9); call set_itv_9(ratio)
case (10); call set_itv_10(ratio)
case (11); call set_itv_11(ratio)
case (12); call set_itv_12(ratio)
case (13); call set_itv_13(ratio)
case (14); call set_itv_14(ratio)
case (15); call set_itv_15(ratio)
case (16); call set_itv_16(ratio)
case (17); call set_itv_17(ratio)
case (18); call set_itv_18(ratio)
case (19); call set_itv_19(ratio)
case (20); call set_itv_20(ratio)
case (21); call set_itv_21(ratio)
case (22);
case (23); call set_itv_23(ratio)
case (24);
case (25); call set_itv_25(ratio)
case (26); call set_itv_26(ratio)
case (27); call set_itv_27(ratio)
case (28); call set_itv_28(ratio)
case (29); call set_itv_29(ratio)
case (30); call set_itv_30(ratio)
case (31); call set_itv_31(ratio)
case (32); call set_itv_32(ratio)
case (33); call set_itv_33(ratio)
case (34); call set_itv_34(ratio)
case (35); call set_itv_35(ratio)
case (36); call set_itv_36(ratio)
case (37); call set_itv_37(ratio)
case (38); call set_itv_38(ratio)
case (39); call set_itv_39(ratio)
case (40); call set_itv_40(ratio)
case (41); call set_itv_41(ratio)
case (42); call set_itv_42(ratio)
case (43);
case (44); call set_itv_44(ratio)
case (45); call set_itv_45(ratio)
case (46); call set_itv_46(ratio)
case (47); call set_itv_47(ratio)
case (48); call set_itv_48(ratio)
case (49); call set_itv_49(ratio)
case (50); call set_itv_50(ratio)
case (51); call set_itv_51(ratio)
case (52);
case (53); call set_itv_53(ratio)
case (54); call set_itv_54(ratio)
case (55);
case (56); call set_itv_56(ratio)
case (57); call set_itv_57(ratio)
case (58); call set_itv_58(ratio)
case (59); call set_itv_59(ratio)
case (60); call set_itv_60(ratio)
case (61); call set_itv_61(ratio)
case (62); call set_itv_62(ratio)
case (63); call set_itv_63(ratio)
case (64); call set_itv_64(ratio)
case (65); call set_itv_65(ratio)
case (66); call set_itv_66(ratio)
case (67); call set_itv_67(ratio)
case (68); call set_itv_68(ratio)
case (69); call set_itv_69(ratio)
case (70); call set_itv_70(ratio)
case (71); call set_itv_71(ratio)
case (72); call set_itv_72(ratio)
case (73); call set_itv_73(ratio)
case (74); call set_itv_74(ratio)
case (75); call set_itv_75(ratio)
case (76);
case (77);
case (78);
case (79); call set_itv_79(ratio)
case (80);
case (81); call set_itv_81(ratio)
case (82); call set_itv_82(ratio)
case (83); call set_itv_83(ratio)
case (84); call set_itv_84(ratio)
case (85); call set_itv_85(ratio)
case (86); call set_itv_86(ratio)
case (87);
case (88);
case (89); call set_itv_89(ratio)
case (90); call set_itv_90(ratio)
case (91); call set_itv_91(ratio)
case (92); call set_itv_92(ratio)
case (93); call set_itv_93(ratio)
case (94); call set_itv_94(ratio)
case (95); call set_itv_95(ratio)
case (96); call set_itv_96(ratio)
case (97); call set_itv_97(ratio)
case (98); call set_itv_98(ratio)
case (99);
case (100);
case (101);
case (102);
case (103); call set_itv_103(ratio)
case (104); call set_itv_104(ratio)
case (105); call set_itv_105(ratio)
case (106); call set_itv_106(ratio)
case (107); call set_itv_107(ratio)
case (108); call set_itv_108(ratio)
case (109); call set_itv_109(ratio)
case (110); call set_itv_110(ratio)
case (111); call set_itv_111(ratio)
case (112); call set_itv_112(ratio)
case (113); call set_itv_113(ratio)
case (114); call set_itv_114(ratio)
case (115); call set_itv_115(ratio)
case (116); call set_itv_116(ratio)
case (117); call set_itv_117(ratio)
case (118); call set_itv_118(ratio)
case (119); call set_itv_119(ratio)
case (120); call set_itv_120(ratio)
case (121); call set_itv_121(ratio)
case (122); call set_itv_122(ratio)
case (123); call set_itv_123(ratio)
case (124); call set_itv_124(ratio)
case (125); call set_itv_125(ratio)
case (126); call set_itv_126(ratio)
case (127); call set_itv_127(ratio)
case (128); call set_itv_128(ratio)
case (129); call set_itv_129(ratio)
case (130); call set_itv_130(ratio)
case (131); call set_itv_131(ratio)
case (132); call set_itv_132(ratio)
case (133); call set_itv_133(ratio)
case (134); call set_itv_134(ratio)
case (135); call set_itv_135(ratio)
case (136); call set_itv_136(ratio)
case (137); call set_itv_137(ratio)
case (138); call set_itv_138(ratio)
case (139); call set_itv_139(ratio)
case (140); call set_itv_140(ratio)
case (141); call set_itv_141(ratio)
case (142); call set_itv_142(ratio)
case (143); call set_itv_143(ratio)
case (144); call set_itv_144(ratio)
case (145); call set_itv_145(ratio)
case (146); call set_itv_146(ratio)
case (147); call set_itv_147(ratio)
case (148); call set_itv_148(ratio)
case (149); call set_itv_149(ratio)
case (150);
case (151);
case (152); call set_itv_152(ratio)
case (153); call set_itv_153(ratio)
case (154); call set_itv_154(ratio)
case (155); call set_itv_155(ratio)
case (156); call set_itv_156(ratio)
case (157); call set_itv_157(ratio)
case (158); call set_itv_158(ratio)
case (159); call set_itv_159(ratio)
case (160); call set_itv_160(ratio)
case (161); call set_itv_161(ratio)
case (162); call set_itv_162(ratio)
case (163); call set_itv_163(ratio)
case (164); call set_itv_164(ratio)
case (165); call set_itv_165(ratio)
case (166); call set_itv_166(ratio)
case (167); call set_itv_167(ratio)
case (168); call set_itv_168(ratio)
case (169); call set_itv_169(ratio)
case (170); call set_itv_170(ratio)
case (171); call set_itv_171(ratio)
case (172); call set_itv_172(ratio)
! DUMMY Cases
case (173); call set_itv_173(ratio)
case (174); call set_itv_174(ratio)
case (175); call set_itv_175(ratio)
case default
call report_error(57)
end select
! Check that no iteration variable is zero
if (abs(xc(i)) <= 1.0D-12) then
idiags(1) = i ; idiags(2) = ixc(i)
write(*,*) 'Iteration variable ',ixc(i),'(',trim(lablxc(ixc(i))),') is zero.'
call report_error(58)
end if
! Crude method of catching NaN errors
!if ((abs(xc(i)) > 9.99D99).or.(xc(i) /= xc(i))) then
if(variable_error(xc(i)))then
idiags(1) = i ; idiags(2) = ixc(i) ; fdiags(1) = xc(i)
call report_error(59)
end if
if (abs(scale(i)) < 1.0D-99) then
idiags(1) = i ; idiags(2) = ixc(i)
call report_error(60)
end if
end do
end subroutine convxc