CMC Crashing Problems

A central repository for reading materials, assignments, and student-written computer code related to ME/BIOE 485 (Modeling and Simulation of Human Movement).
User avatar
Eric Lew
Posts: 9
Joined: Tue Oct 09, 2007 10:36 pm

CMC Crashing Problems

Post by Eric Lew » Mon Apr 21, 2008 12:13 am

Hello,

I'm also having problems running CMC on the slow running trial. I was able to successfully run RRA and CMC from May's sample set up files. I can also successfully run RRA from my own setup file.

I'll list the error read out from the command prompt after this, but first I want to quickly explain the steps I've taken to try to fix this.

1) relocated the CM position
2) locked joints
3) recalculated IK solution
4) for cmc, using fast optimization
5) set cmc_time_window to .001

The error I get is "The optimizer could not find a solution at time = 0.91000."

I chose my time interval to between 0.8325 and 1.1283, which are the times where the GRF is nonzero.


-------------------------------------------------------
This program includes software developed by the
Apache Software Foundation (http://www.apache.org/).
-------------------------------------------------------

Deleted model
RegisterTypes_SdfastEngine

-------------------------------------------------------
Library SdfastEngine...
-------------------------------------------------------

RegisterTypes_SimbodyEngine

-------------------------------------------------------
Library SimbodyEngine...
-------------------------------------------------------

Constructing investigation from setup file HW2_CMC_settings.xml.

AbstractTool EricLew_CMC_output_ loading model 'EricLewScaledModel.osim'
Created model EricLew.3DGaitModel2354-Scaled from file EricLewScaledModel.osim
Adding actuator set from hpl_overground_CMC_Actuators.xml
Handling locked coordinate.
Handling locked coordinate.
Handling locked coordinate.
Handling locked coordinate.
SimbodyCoordinate.setValue: WARN- coordinate subtalar_angle_r is locked. Unable
to change its value.
SimbodyCoordinate.setValue: WARN- coordinate mtp_angle_r is locked. Unable to ch
ange its value.
SimbodyCoordinate.setValue: WARN- coordinate subtalar_angle_l is locked. Unable
to change its value.
SimbodyCoordinate.setValue: WARN- coordinate mtp_angle_l is locked. Unable to ch
ange its value.
-----------------------------------------------------------------------
Loaded library
-----------------------------------------------------------------------
MODEL: EricLew.3DGaitModel2354-Scaled
actuators: 19
analyses: 0
contacts: 0
-----------------------------------------------------------------------

Running tool EricLew_CMC_output_.
MODEL: EricLew.3DGaitModel2354-Scaled

ANALYSES (0)

BODIES (13)
body[0] = ground (mass: 0) (inertia: 0 0 0 0 0 0 0 0 0)
body[1] = pelvis (mass: 10.7957) (inertia: 0.102245 0 0 0 0.0866297 0 0 0 0.0575
873)
body[2] = femur_r (mass: 9.16649) (inertia: 0.151728 0 0 0 0.0391486 0 0 0 0.151
728)
body[3] = tibia_r (mass: 4.44813) (inertia: 0.0785012 0 0 0 0.00794357 0 0 0 0.0
795915)
body[4] = talus_r (mass: 0.100323) (inertia: 0.00115599 0 0 0 0.00115599 0 0 0 0
.00115599)
body[5] = calcn_r (mass: 1.25404) (inertia: 0.00161839 0 0 0 0.00450837 0 0 0 0.
00473957)
body[6] = toes_r (mass: 0.2173) (inertia: 0.0001156 0 0 0 0.0002312 0 0 0 0.0011
5599)
body[7] = femur_l (mass: 8.66387) (inertia: 0.135921 0 0 0 0.0359937 0 0 0 0.135
921)
body[8] = tibia_l (mass: 4.49262) (inertia: 0.0798143 0 0 0 0.00807644 0 0 0 0.0
809228)
body[9] = talus_l (mass: 0.0910518) (inertia: 0.00098348 0 0 0 0.00098348 0 0 0
0.00098348)
body[10] = calcn_l (mass: 1.13815) (inertia: 0.00137687 0 0 0 0.00383558 0 0 0 0
.00403227)
body[11] = toes_l (mass: 0.197218) (inertia: 9.835e-005 0 0 0 0.0001967 0 0 0 0.
00098348)
body[12] = torso (mass: 32.4951) (inertia: 1.34554 0 0 0 0.906256 0 0 0 1.34554)


ACTUATORS (19)
actuator[0] = FX (controls: FX.excitation)
actuator[1] = FY (controls: FY.excitation)
actuator[2] = FZ (controls: FZ.excitation)
actuator[3] = MX (controls: MX.excitation)
actuator[4] = MY (controls: MY.excitation)
actuator[5] = MZ (controls: MZ.excitation)
actuator[6] = hip_flexion_r_reserve (controls: hip_flexion_r_reserve.excitation)

actuator[7] = hip_adduction_r_reserve (controls: hip_adduction_r_reserve.excitat
ion)
actuator[8] = hip_rotation_r_reserve (controls: hip_rotation_r_reserve.excitatio
n)
actuator[9] = knee_angle_r_reserve (controls: knee_angle_r_reserve.excitation)
actuator[10] = ankle_angle_r_reserve (controls: ankle_angle_r_reserve.excitation
)
actuator[11] = hip_flexion_l_reserve (controls: hip_flexion_l_reserve.excitation
)
actuator[12] = hip_adduction_l_reserve (controls: hip_adduction_l_reserve.excita
tion)
actuator[13] = hip_rotation_l_reserve (controls: hip_rotation_l_reserve.excitati
on)
actuator[14] = knee_angle_l_reserve (controls: knee_angle_l_reserve.excitation)
actuator[15] = ankle_angle_l_reserve (controls: ankle_angle_l_reserve.excitation
)
actuator[16] = lumbar_extension_reserve (controls: lumbar_extension_reserve.exci
tation)
actuator[17] = lumbar_bending_reserve (controls: lumbar_bending_reserve.excitati
on)
actuator[18] = lumbar_rotation_reserve (controls: lumbar_rotation_reserve.excita
tion)

CONTACTS (0)
numControls = 19
numStates = 46
numCoordinates = 23
numSpeeds = 23
numActuators = 19
numBodies = 13

STATES (46)
y[0] = pelvis_tx
y[1] = pelvis_ty
y[2] = pelvis_tz
y[3] = pelvis_tilt
y[4] = pelvis_list
y[5] = pelvis_rotation
y[6] = hip_flexion_r
y[7] = hip_adduction_r
y[8] = hip_rotation_r
y[9] = knee_angle_r
y[10] = ankle_angle_r
y[11] = subtalar_angle_r
y[12] = mtp_angle_r
y[13] = hip_flexion_l
y[14] = hip_adduction_l
y[15] = hip_rotation_l
y[16] = knee_angle_l
y[17] = ankle_angle_l
y[18] = subtalar_angle_l
y[19] = mtp_angle_l
y[20] = lumbar_extension
y[21] = lumbar_bending
y[22] = lumbar_rotation
y[23] = pelvis_tx_u
y[24] = pelvis_ty_u
y[25] = pelvis_tz_u
y[26] = pelvis_tilt_u
y[27] = pelvis_list_u
y[28] = pelvis_rotation_u
y[29] = hip_flexion_r_u
y[30] = hip_adduction_r_u
y[31] = hip_rotation_r_u
y[32] = knee_angle_r_u
y[33] = ankle_angle_r_u
y[34] = subtalar_angle_r_u
y[35] = mtp_angle_r_u
y[36] = hip_flexion_l_u
y[37] = hip_adduction_l_u
y[38] = hip_rotation_l_u
y[39] = knee_angle_l_u
y[40] = ankle_angle_l_u
y[41] = subtalar_angle_l_u
y[42] = mtp_angle_l_u
y[43] = lumbar_extension_u
y[44] = lumbar_bending_u
y[45] = lumbar_rotation_u


Loading desired kinematics from file RRA_outputs\hpl_overground_RRA__Kinematics_
q.sto ...
Storage: file=RRA_outputs\hpl_overground_RRA__Kinematics_q.sto (nr=293 nc=24)


WARN- The final time set for the cmc run is past the last time stamp
in the desired kinematics file RRA_outputs\hpl_overground_RRA__Kinematics_q.sto.

Resetting the final time from 1.12833 to 1.1245.



Low-pass filtering desired kinematics with a cutoff frequency of 6...



Loading external loads kinematics from file hpl_overground_slow_run_IK_joints_lo
cked_hw2.sto ...
Storage: file=hpl_overground_slow_run_IK_joints_locked_hw2.sto (nr=37 nc=159)
Low-pass filtering external load kinematics with a cutoff frequency of 6...
Storage: file=hpl_overground_slow_run_grf.mot (nr=4800 nc=19)

Note: requested COM adjustment time range 0.91 - 1.1245 clamped to nearest avail
able data times 0.9095 - 1.1245

Computing average residuals between 0.9095 and 1.1245
Average residuals before adjusting pelvis COM:
FX=-28.1254 FY=-70.6848 FZ=31.7662
MX=3.23237 MY=-3.79898 MZ=-69.583

CMCTool.adjustCOMToReduceResiduals:
pelvis weight = 105.87
dx=-0.1, dz=-0.0305315
Handling locked coordinate.
Handling locked coordinate.
Handling locked coordinate.
Handling locked coordinate.

dmass = 7.20784

Recommended mass adjustments:
ground: orig mass = 0, new mass = 0
pelvis: orig mass = 10.7957, new mass = 11.8608
femur_r: orig mass = 9.16649, new mass = 10.0708
tibia_r: orig mass = 4.44813, new mass = 4.88696
talus_r: orig mass = 0.100323, new mass = 0.110221
calcn_r: orig mass = 1.25404, new mass = 1.37776
toes_r: orig mass = 0.2173, new mass = 0.238738
femur_l: orig mass = 8.66387, new mass = 9.51861
tibia_l: orig mass = 4.49262, new mass = 4.93585
talus_l: orig mass = 0.0910518, new mass = 0.100035
calcn_l: orig mass = 1.13815, new mass = 1.25043
toes_l: orig mass = 0.197218, new mass = 0.216675
torso: orig mass = 32.4951, new mass = 35.7009

Computing average residuals between 0.9095 and 1.1245
Average residuals after adjusting pelvis COM:
FX=-27.52 FY=-69.1605 FZ=30.429
MX=-1.94093 MY=-2.31568 MZ=-56.2414


Constructing function set for tracking...

No Actuation analysis found in analysis set -- adding one
No Kinematics analysis found in analysis set -- adding one


taskSet size = 19

Using the generalized coordinates specified in RRA_outputs\hpl_overground_RRA__K
inematics_q.sto to set the initial configuration.
Using IPOPT optimizer algorithm.

Setting optimizer print level to 0.
Setting optimizer convergence criterion to 1e-006.
Setting optimizer maximum iterations to 100.

Setting cmc controller to not use verbose printing.



================================================================
================================================================
Using CMC to track the specified kinematics
Integrating from 0.91 to 1.1245
Start time = Mon Apr 21 00:05:15 2008
================================================================
rdCMC.computeControls: t = 0.91
SimTK Exception thrown at InteriorPointOptimizer.cpp:180:
Optmizer failed: Ipopt: Infeasible problem detected (status 2)
OPTIMIZATION FAILED...


rdCMC.computeControls: WARN- The optimizer could not find a solution at time =
0.910000.
If using the fast target, try using the slow target.
Starting at a slightly different initial time may also help.



This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Deleted model default

Thanks,
Eric

User avatar
May Liu
Posts: 11
Joined: Tue May 24, 2005 3:20 pm

RE: CMC Crashing Problems

Post by May Liu » Mon Apr 21, 2008 12:29 am

Hi Eric,

Could you check to see that the flag to adjust the center of mass is *false* in the CMC setup file? The readout suggests that CMC is trying to adjust the center of mass, which we do *not* want to do in the CMC step (only do that in RRA).

I don't know if this is what's causing the crash, but I do know that there should be no mass adjustment performed in CMC.

Let us know what happens,
May

User avatar
Eric Lew
Posts: 9
Joined: Tue Oct 09, 2007 10:36 pm

RE: CMC Crashing Problems

Post by Eric Lew » Mon Apr 21, 2008 12:38 am

Hi May,

Thanks for the quick response. You were right, that flag was true. I switched it to false, but the optimizer is still failing.

I'll post the read out in another post so it doesn't make this one so long.

User avatar
Eric Lew
Posts: 9
Joined: Tue Oct 09, 2007 10:36 pm

RE: CMC Crashing Problems

Post by Eric Lew » Mon Apr 21, 2008 12:39 am

-------------------------------------------------------
This program includes software developed by the
Apache Software Foundation (http://www.apache.org/).
-------------------------------------------------------

Deleted model
RegisterTypes_SdfastEngine

-------------------------------------------------------
Library SdfastEngine...
-------------------------------------------------------

RegisterTypes_SimbodyEngine

-------------------------------------------------------
Library SimbodyEngine...
-------------------------------------------------------

Constructing investigation from setup file HW2_CMC_settings.xml.

AbstractTool EricLew_CMC_output_ loading model 'EricLewScaledModel.osim'
Created model EricLew.3DGaitModel2354-Scaled from file EricLewScaledModel.osim
Adding actuator set from hpl_overground_CMC_Actuators.xml
Handling locked coordinate.
Handling locked coordinate.
Handling locked coordinate.
Handling locked coordinate.
SimbodyCoordinate.setValue: WARN- coordinate subtalar_angle_r is locked. Unable
to change its value.
SimbodyCoordinate.setValue: WARN- coordinate mtp_angle_r is locked. Unable to ch
ange its value.
SimbodyCoordinate.setValue: WARN- coordinate subtalar_angle_l is locked. Unable
to change its value.
SimbodyCoordinate.setValue: WARN- coordinate mtp_angle_l is locked. Unable to ch
ange its value.
-----------------------------------------------------------------------
Loaded library
-----------------------------------------------------------------------
MODEL: EricLew.3DGaitModel2354-Scaled
actuators: 19
analyses: 0
contacts: 0
-----------------------------------------------------------------------

Running tool EricLew_CMC_output_.
MODEL: EricLew.3DGaitModel2354-Scaled

ANALYSES (0)

BODIES (13)
body[0] = ground (mass: 0) (inertia: 0 0 0 0 0 0 0 0 0)
body[1] = pelvis (mass: 10.7957) (inertia: 0.102245 0 0 0 0.0866297 0 0 0 0.0575
873)
body[2] = femur_r (mass: 9.16649) (inertia: 0.151728 0 0 0 0.0391486 0 0 0 0.151
728)
body[3] = tibia_r (mass: 4.44813) (inertia: 0.0785012 0 0 0 0.00794357 0 0 0 0.0
795915)
body[4] = talus_r (mass: 0.100323) (inertia: 0.00115599 0 0 0 0.00115599 0 0 0 0
.00115599)
body[5] = calcn_r (mass: 1.25404) (inertia: 0.00161839 0 0 0 0.00450837 0 0 0 0.
00473957)
body[6] = toes_r (mass: 0.2173) (inertia: 0.0001156 0 0 0 0.0002312 0 0 0 0.0011
5599)
body[7] = femur_l (mass: 8.66387) (inertia: 0.135921 0 0 0 0.0359937 0 0 0 0.135
921)
body[8] = tibia_l (mass: 4.49262) (inertia: 0.0798143 0 0 0 0.00807644 0 0 0 0.0
809228)
body[9] = talus_l (mass: 0.0910518) (inertia: 0.00098348 0 0 0 0.00098348 0 0 0
0.00098348)
body[10] = calcn_l (mass: 1.13815) (inertia: 0.00137687 0 0 0 0.00383558 0 0 0 0
.00403227)
body[11] = toes_l (mass: 0.197218) (inertia: 9.835e-005 0 0 0 0.0001967 0 0 0 0.
00098348)
body[12] = torso (mass: 32.4951) (inertia: 1.34554 0 0 0 0.906256 0 0 0 1.34554)


ACTUATORS (19)
actuator[0] = FX (controls: FX.excitation)
actuator[1] = FY (controls: FY.excitation)
actuator[2] = FZ (controls: FZ.excitation)
actuator[3] = MX (controls: MX.excitation)
actuator[4] = MY (controls: MY.excitation)
actuator[5] = MZ (controls: MZ.excitation)
actuator[6] = hip_flexion_r_reserve (controls: hip_flexion_r_reserve.excitation)

actuator[7] = hip_adduction_r_reserve (controls: hip_adduction_r_reserve.excitat
ion)
actuator[8] = hip_rotation_r_reserve (controls: hip_rotation_r_reserve.excitatio
n)
actuator[9] = knee_angle_r_reserve (controls: knee_angle_r_reserve.excitation)
actuator[10] = ankle_angle_r_reserve (controls: ankle_angle_r_reserve.excitation
)
actuator[11] = hip_flexion_l_reserve (controls: hip_flexion_l_reserve.excitation
)
actuator[12] = hip_adduction_l_reserve (controls: hip_adduction_l_reserve.excita
tion)
actuator[13] = hip_rotation_l_reserve (controls: hip_rotation_l_reserve.excitati
on)
actuator[14] = knee_angle_l_reserve (controls: knee_angle_l_reserve.excitation)
actuator[15] = ankle_angle_l_reserve (controls: ankle_angle_l_reserve.excitation
)
actuator[16] = lumbar_extension_reserve (controls: lumbar_extension_reserve.exci
tation)
actuator[17] = lumbar_bending_reserve (controls: lumbar_bending_reserve.excitati
on)
actuator[18] = lumbar_rotation_reserve (controls: lumbar_rotation_reserve.excita
tion)

CONTACTS (0)
numControls = 19
numStates = 46
numCoordinates = 23
numSpeeds = 23
numActuators = 19
numBodies = 13

STATES (46)
y[0] = pelvis_tx
y[1] = pelvis_ty
y[2] = pelvis_tz
y[3] = pelvis_tilt
y[4] = pelvis_list
y[5] = pelvis_rotation
y[6] = hip_flexion_r
y[7] = hip_adduction_r
y[8] = hip_rotation_r
y[9] = knee_angle_r
y[10] = ankle_angle_r
y[11] = subtalar_angle_r
y[12] = mtp_angle_r
y[13] = hip_flexion_l
y[14] = hip_adduction_l
y[15] = hip_rotation_l
y[16] = knee_angle_l
y[17] = ankle_angle_l
y[18] = subtalar_angle_l
y[19] = mtp_angle_l
y[20] = lumbar_extension
y[21] = lumbar_bending
y[22] = lumbar_rotation
y[23] = pelvis_tx_u
y[24] = pelvis_ty_u
y[25] = pelvis_tz_u
y[26] = pelvis_tilt_u
y[27] = pelvis_list_u
y[28] = pelvis_rotation_u
y[29] = hip_flexion_r_u
y[30] = hip_adduction_r_u
y[31] = hip_rotation_r_u
y[32] = knee_angle_r_u
y[33] = ankle_angle_r_u
y[34] = subtalar_angle_r_u
y[35] = mtp_angle_r_u
y[36] = hip_flexion_l_u
y[37] = hip_adduction_l_u
y[38] = hip_rotation_l_u
y[39] = knee_angle_l_u
y[40] = ankle_angle_l_u
y[41] = subtalar_angle_l_u
y[42] = mtp_angle_l_u
y[43] = lumbar_extension_u
y[44] = lumbar_bending_u
y[45] = lumbar_rotation_u


Loading desired kinematics from file RRA_outputs\hpl_overground_RRA__Kinematics_
q.sto ...
Storage: file=RRA_outputs\hpl_overground_RRA__Kinematics_q.sto (nr=293 nc=24)


WARN- The final time set for the cmc run is past the last time stamp
in the desired kinematics file RRA_outputs\hpl_overground_RRA__Kinematics_q.sto.

Resetting the final time from 1.12833 to 1.1245.



Low-pass filtering desired kinematics with a cutoff frequency of 6...



Loading external loads kinematics from file hpl_overground_slow_run_IK_joints_lo
cked_hw2.sto ...
Storage: file=hpl_overground_slow_run_IK_joints_locked_hw2.sto (nr=37 nc=159)
Low-pass filtering external load kinematics with a cutoff frequency of 6...
Storage: file=hpl_overground_slow_run_grf.mot (nr=4800 nc=19)

Constructing function set for tracking...

No Actuation analysis found in analysis set -- adding one
No Kinematics analysis found in analysis set -- adding one


taskSet size = 19

Using the generalized coordinates specified in RRA_outputs\hpl_overground_RRA__K
inematics_q.sto to set the initial configuration.
Using IPOPT optimizer algorithm.

Setting optimizer print level to 0.
Setting optimizer convergence criterion to 1e-006.
Setting optimizer maximum iterations to 100.

Setting cmc controller to not use verbose printing.



================================================================
================================================================
Using CMC to track the specified kinematics
Integrating from 0.8325 to 1.1245
Start time = Mon Apr 21 00:38:41 2008
================================================================
rdCMC.computeControls: t = 0.8325
SimTK Exception thrown at InteriorPointOptimizer.cpp:180:
Optmizer failed: Ipopt: Infeasible problem detected (status 2)
OPTIMIZATION FAILED...


rdCMC.computeControls: WARN- The optimizer could not find a solution at time =
0.832500.
If using the fast target, try using the slow target.
Starting at a slightly different initial time may also help.



This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Deleted model default

User avatar
May Liu
Posts: 11
Joined: Tue May 24, 2005 3:20 pm

RE: CMC Crashing Problems

Post by May Liu » Mon Apr 21, 2008 7:10 am

Ok, I have a couple more suggestions to try.

- Make sure that you are NOT filtering the RRA kinematics in the CMC setup file. It looks like it's trying to filter at 6 Hz. Set the cutoff frequency to some negative number to stop it from filtering.

- Take a good look at your RRA results, especially the residual and reserve actuator forces. Are any of them saturating? If so, increase the limits allowed on them. Did you get good kinematics tracking, or is it bad? If it's bad, adjust your RRA settings to get reasonable tracking and then do CMC.

- If it's still failing, go ahead and commit your RRA and CMC setup files and actuator/task/control constraint files to your repository, in the same directory as homework 1. Let me know when you've done this and I'll go take a look.

- May

User avatar
May Liu
Posts: 11
Joined: Tue May 24, 2005 3:20 pm

RE: CMC Crashing Problems

Post by May Liu » Mon Apr 21, 2008 8:02 am

A clarification to my last post:

>> - Take a good look at your RRA results, especially the residual and reserve actuator forces.

The RRA solution does not technically have "reserve" actuators, what I was referring to was the joint torque actuators. There are residual (FX, FY, FZ, MX, MY, MZ) actuators however.

- May

User avatar
Katerina Blazek
Posts: 3
Joined: Wed Apr 02, 2008 3:45 pm

RE: CMC Crashing Problems

Post by Katerina Blazek » Mon Apr 21, 2008 10:40 am

Eric,

one thing I found when doing CMC on the running trial is that the actuators (FX, FY, FZ, MX, MY, and MZ) don't saturate individually, but that the optimizer is failing because in combination all of them are too close to their limits. To see what I mean, set the optimizer to verbose printing, which will tell you what the optimizer is doing at every step. For a normal time step, the constraint violation it spits out will be a very small number, and hence the infeasibility number will be low. When the optimizer starts failing, the constraint violations number will shoot up and everything crashes.

If I set the constraints to really large numbers, everything ran just fine; the actuator values didn't actually increase, but the optimizer was happier. I'm not sure if this is the "approved" way of fixing the problem, but it seems to work ;-).

Cheers,
Katerina

User avatar
May Liu
Posts: 11
Joined: Tue May 24, 2005 3:20 pm

RE: CMC Crashing Problems

Post by May Liu » Mon Apr 21, 2008 10:47 am

Fantastic solution, Katerina! It absolutely falls under "approved" ways!

- May

User avatar
Eric Lew
Posts: 9
Joined: Tue Oct 09, 2007 10:36 pm

RE: CMC Crashing Problems

Post by Eric Lew » Mon Apr 21, 2008 11:14 am

Hi May,

I finished comparing my IK solution to the RRA solution. The kinematics match well (I think).

Where do I find the reserve/residual forces? Are they the FX FY FZ MX MY MZ force in the RRA_actuation_forces.xml file?

If so, FX FY FZ MX MY MZ, do not saturate. I'll come in to office hours at around 330pm today.

Thanks for your help,
Eric

User avatar
Eric Lew
Posts: 9
Joined: Tue Oct 09, 2007 10:36 pm

RE: CMC Crashing Problems

Post by Eric Lew » Mon Apr 21, 2008 10:11 pm

So I restarted everything but edited May's file instead of the GUI and everything ran without crashing. I'm going to start analyzing my files now, but whatever was wrong must have had to do with the GUI, so I guess this classifies as a GUI problem.

Thanks again for your help Katerina, May, Sam, Chand, and Ajay!

POST REPLY