Routine to load the physics and engineering variables into the
optimisation variables array
author: P J Knight, CCFE, Culham Science Centre
author: J Morris, CCFE, Culham Science Centre
None
This subroutine loads the physics and engineering variables
into the optimisation variables array XCM.
subroutine loadxc
!! Routine to load the physics and engineering variables into the
!! optimisation variables array
!! author: P J Knight, CCFE, Culham Science Centre
!! author: J Morris, CCFE, Culham Science Centre
!! None
!! This subroutine loads the physics and engineering variables
!! into the optimisation variables array <CODE>XCM</CODE>.
!
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
use constants, only: nout
use maths_library, only: variable_error
use error_handling, only: idiags, fdiags, report_error
use numerics, only: nvar, xcm, ixc, name_xc, lablxc, scafc, scale
use physics_variables, only: icurr
use global_variables, only: vlabel
implicit none
! Local variables
integer :: i
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
do i = 1,nvar
select case (ixc(i))
case (1); xcm(i) = itv_1()
case (2); xcm(i) = itv_2()
case (3); xcm(i) = itv_3()
case (4); xcm(i) = itv_4()
case (5); xcm(i) = itv_5()
case (6); xcm(i) = itv_6()
case (7); xcm(i) = itv_7()
case (8); xcm(i) = itv_8()
case (9); xcm(i) = itv_9()
case (10); xcm(i) = itv_10()
case (11); xcm(i) = itv_11()
case (12); xcm(i) = itv_12()
case (13); xcm(i) = itv_13()
case (14); xcm(i) = itv_14()
case (15); xcm(i) = itv_15()
case (16); xcm(i) = itv_16()
case (17); xcm(i) = itv_17()
case (18); xcm(i) = itv_18()
case (19); xcm(i) = itv_19()
case (20); xcm(i) = itv_20()
case (21); xcm(i) = itv_21()
case (22); xcm(i) = itv_22()
case (23); xcm(i) = itv_23()
case (24); xcm(i) = itv_24()
case (25); xcm(i) = itv_25()
case (26); xcm(i) = itv_26()
case (27); xcm(i) = itv_27()
case (28); xcm(i) = itv_28()
case (29); xcm(i) = itv_29()
case (30); xcm(i) = itv_30()
case (31); xcm(i) = itv_31()
case (32); xcm(i) = itv_32()
case (33); xcm(i) = itv_33()
case (34); xcm(i) = itv_34()
case (35); xcm(i) = itv_35()
case (36); xcm(i) = itv_36()
case (37); xcm(i) = itv_37()
case (38); xcm(i) = itv_38()
case (39); xcm(i) = itv_39()
case (40); xcm(i) = itv_40()
case (41); xcm(i) = itv_41()
case (42); xcm(i) = itv_42()
case (43);
case (44); xcm(i) = itv_44()
case (45); xcm(i) = itv_45()
case (46); xcm(i) = itv_46()
case (47); xcm(i) = itv_47()
case (48); xcm(i) = itv_48()
case (49); xcm(i) = itv_49()
case (50); xcm(i) = itv_50()
case (51); xcm(i) = itv_51()
case (52); xcm(i) = itv_52()
case (53); xcm(i) = itv_53()
case (54); xcm(i) = itv_54()
case (55); xcm(i) = itv_55()
case (56); xcm(i) = itv_56()
case (57); xcm(i) = itv_57()
case (58); xcm(i) = itv_58()
case (59); xcm(i) = itv_59()
case (60); xcm(i) = itv_60()
case (61); xcm(i) = itv_61()
case (62); xcm(i) = itv_62()
case (63); xcm(i) = itv_63()
case (64); xcm(i) = itv_64()
case (65); xcm(i) = itv_65()
case (66); xcm(i) = itv_66()
case (67); xcm(i) = itv_67()
case (68); xcm(i) = itv_68()
case (69); xcm(i) = itv_69()
case (70); xcm(i) = itv_70()
case (71); xcm(i) = itv_71()
case (72); xcm(i) = itv_72()
case (73); xcm(i) = itv_73()
case (74); xcm(i) = itv_74()
case (75); xcm(i) = itv_75()
case (76); xcm(i) = itv_76()
case (77); xcm(i) = itv_77()
case (78); xcm(i) = itv_78()
case (79); xcm(i) = itv_79()
case (80); xcm(i) = itv_80()
case (81); xcm(i) = itv_81()
case (82); xcm(i) = itv_82()
case (83); xcm(i) = itv_83()
case (84); xcm(i) = itv_84()
case (85); xcm(i) = itv_85()
case (86); xcm(i) = itv_86()
case (87);
case (88);
case (89); xcm(i) = itv_89()
case (90); xcm(i) = itv_90()
case (91); xcm(i) = itv_91()
case (92); xcm(i) = itv_92()
case (93); xcm(i) = itv_93()
case (94); xcm(i) = itv_94()
case (95); xcm(i) = itv_95()
case (96); xcm(i) = itv_96()
case (97); xcm(i) = itv_97()
case (98); xcm(i) = itv_98()
case (99);
case (100);
case (101);
case (102);
case (103); xcm(i) = itv_103()
case (104); xcm(i) = itv_104()
case (105); xcm(i) = itv_105()
case (106); xcm(i) = itv_106()
case (107); xcm(i) = itv_107()
case (108); xcm(i) = itv_108()
case (109); xcm(i) = itv_109()
case (110); xcm(i) = itv_110()
case (111); xcm(i) = itv_111()
case (112); xcm(i) = itv_112()
case (113); xcm(i) = itv_113()
case (114); xcm(i) = itv_114()
case (115); xcm(i) = itv_115()
case (116); xcm(i) = itv_116()
case (117); xcm(i) = itv_117()
case (118); xcm(i) = itv_118()
case (119); xcm(i) = itv_119()
case (120); xcm(i) = itv_120()
case (121); xcm(i) = itv_121()
case (122); xcm(i) = itv_122()
case (123); xcm(i) = itv_123()
case (124); xcm(i) = itv_124()
case (125); xcm(i) = itv_125()
case (126); xcm(i) = itv_126()
case (127); xcm(i) = itv_127()
case (128); xcm(i) = itv_128()
case (129); xcm(i) = itv_129()
case (130); xcm(i) = itv_130()
case (131); xcm(i) = itv_131()
case (132); xcm(i) = itv_132()
case (133); xcm(i) = itv_133()
case (134); xcm(i) = itv_134()
case (135); xcm(i) = itv_135()
case (136); xcm(i) = itv_136()
case (137); xcm(i) = itv_137()
case (138); xcm(i) = itv_138()
case (139); xcm(i) = itv_139()
case (140); xcm(i) = itv_140()
case (141); xcm(i) = itv_141()
case (142); xcm(i) = itv_142()
case (143); xcm(i) = itv_143()
case (144); xcm(i) = itv_144()
case (145); xcm(i) = itv_145()
case (146); xcm(i) = itv_146()
case (147); xcm(i) = itv_147()
case (148); xcm(i) = itv_148()
case (149); xcm(i) = itv_149()
case (150);
case (151);
case (152); xcm(i) = itv_152()
case (153); xcm(i) = itv_153()
case (154); xcm(i) = itv_154()
case (155); xcm(i) = itv_155()
case (156); xcm(i) = itv_156()
case (157); xcm(i) = itv_157()
case (158); xcm(i) = itv_158()
case (159); xcm(i) = itv_159()
case (160); xcm(i) = itv_160()
case (161); xcm(i) = itv_161()
case (162); xcm(i) = itv_162()
case (163); xcm(i) = itv_163()
case (164); xcm(i) = itv_164()
case (165); xcm(i) = itv_165()
case (166); xcm(i) = itv_166()
case (167); xcm(i) = itv_167()
case (168); xcm(i) = itv_168()
case (169); xcm(i) = itv_169()
case (170); xcm(i) = itv_170()
case (171); xcm(i) = itv_171()
case (172); xcm(i) = itv_172()
! DUMMY Cases
case (173); xcm(i) = itv_173()
case (174); xcm(i) = itv_174()
case (175); xcm(i) = itv_175()
case default
idiags(1) = i ; idiags(2) = ixc(i)
call report_error(54)
end select
! Simple list of iteration variable names
name_xc(i) = lablxc(ixc(i))
! Note that iteration variable 18 has more than one name:
if ((ixc(i) == 18).and.(icurr /= 2)) name_xc(i) = 'q95'
if ((ixc(i) == 18).and.(icurr == 2)) name_xc(i) = 'qbar'
! MDK Check if sweep variable is also an iteration variable
if (name_xc(i) == vlabel) then
write(nout,*) 'WARNING: The sweep variable is also an iteration variable.'
write(nout,*) 'The values of the sweep variable will be overwritten by the optimiser.'
write(*,*) 'WARNING: The sweep variable is also an iteration variable.'
end if
! Check that no iteration variable is zero
if (abs(xcm(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(55)
end if
! Crude method of catching NaN errors
!if ( (abs(xcm(i)) > 9.99D99).or.(xcm(i) /= xcm(i)) ) then
if ( variable_error(xcm(i)) ) then
idiags(1) = i ; idiags(2) = ixc(i) ; fdiags(1) = xcm(i)
call report_error(56)
end if
end do
do i = 1,nvar
if (abs(xcm(i)) > 1.0D-99) then
scale(i) = 1.0D0/xcm(i)
else
scale(i) = 1.0D0
end if
scafc(i) = 1.0D0/scale(i)
xcm(i) = xcm(i)*scale(i)
end do
end subroutine loadxc